日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JMX 与系统管理

發布時間:2025/3/21 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMX 与系统管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在 Java 程序的運行過程中,對 JVM 和系統的監測一直是 Java 開發人員在開發過程所需要的。一直以來,Java 開發人員必須通過一些底層的 JVM API,比如 JVMPI 和 JVMTI 等,才能監測 Java 程序運行過程中的 JVM 和系統的一系列情況,這種方式一直以來被人所詬病,因為這需要大量的 C 程序和 JNI 調用,開發效率十分低下。于是出現了各種不同的專門做資源管理的程序包。為了解決這個問題,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理擴展(Java Management Extensions,JMX)用來管理檢測 Java 程序(同時 JMX 也在 J2EE 1.4 中被發布)。

JMX 的提出,讓 JDK 中開發自檢測程序成為可能,也提供了大量輕量級的檢測 JVM 和運行中對象 / 線程的方式,從而提高了 Java 語言自己的管理監測能力。

JMX 和系統管理

管理系統(Management System)

要了解 JMX,我們就必須對當前的 IT 管理系統有一個初步的了解。隨著企業 IT 規模的不斷增長,IT 資源(IT resource)數量不斷增加,IT 資源的分布也越來越分散。可以想象,甚至對于一家只有幾百臺 PC 公司的 IT 管理人員來說,分發一個安全補丁并且保證其在每臺 PC 上的安裝,如果只依賴人工來完成那簡直就是一場噩夢。這樣,IT 管理系統就應運而生。

然而,CPU、網卡、存儲陣列是 IT 資源;OS、MS Office、Oracle database、IBM Websphere 也是 IT 資源。IT 管理系統若要對這些 IT 資源進行管理,就必須對這些管理對象有所了解:形形色色的 IT 資源就像是說著不同語言的人:Oralce 數據庫表達內存緊張的方式和 Window XP 是絕然不同的, 而 IT 管理系統就像建造通天塔的經理,必須精通所有的語言, 這幾乎是一個不可能完成的任務。難道 IT 管理系統是另外一個通天塔嗎?當然不是!其實我們只要給每個 IT 資源配個翻譯就可以了。

管理系統的構架

圖 1. 管理系統構架

上圖分析了管理系統的基本構架模式。其中 Agent / SubAgent 起到的就是翻譯的作用:把 IT 資源報告的消息以管理系統能理解的方式傳送出去。

也許讀者有會問,為什么需要 Agent 和 SubAgent 兩層體系呢?這里有兩個現實的原因:

  • 管理系統一般是一個中央控制的控制軟件,而 SubAgent 直接監控一些資源,往往和這些資源分布在同一物理位置。當這些 SubAgent 把狀態信息傳輸到管理系統或者傳達管理系統的控制指令的時候,需要提供一些網絡傳輸的功能。
  • 管理系統的消息是有一定規范的,消息的翻譯本身是件復雜而枯燥的事情。
  • 一般來說,管理系統會將同一物理分布或者功能類似的 SubAgent 分組成一組,由一個共用的 Agent 加以管理。在這個 Agent 里封裝了 1 和 2 的功能。

    JMX 和管理系統

    JMX 既是 Java 管理系統的一個標準,一個規范,也是一個接口,一個框架。圖 2 展示了 JMX 的基本架構。

    圖 2. JMX 構架

    和其它的資源系統一樣,JMX 是管理系統和資源之間的一個接口,它定義了管理系統和資源之間交互的標準。javax.management.MBeanServer實現了 Agent 的功能,以標準的方式給出了管理系統訪問 JMX 框架的接口。而?javax.management.MBeans實現了 SubAgent 的功能,以標準的方式給出了 JMX 框架訪問資源的接口。而從類庫的層次上看,JMX 包括了核心類庫?java.lang.management和?javax.management包。java.lang.management包提供了基本的 VM 監控功能,而?javax.management包則向用戶提供了擴展功能。

    JMX 的基本框架

    JMX 使用了 Java Bean 模式來傳遞信息。一般說來,JMX 使用有名的 MBean,其內部包含了數據信息,這些信息可能是:應用程序配置信息、模塊信息、系統信息、統計信息等。另外,MBean 也可以設立可讀寫的屬性、直接操作某些函數甚至啟動 MBean 可發送的 notification 等。MBean 包括 Standard,MXBean,Dynamic,Model,Open 等幾種分類,其中最簡單是標準 MBean 和 MXBean,而我們使用得最多的也是這兩種。MXBean 主要是?java.lang.management使用較多,將在下一節中介紹。我們先了解其他一些重要的 MBean 的種類。

    標準 MBean

    標準 MBean 是最簡單的一類 MBean,與動態 Bean 不同,它并不實現?javax.management包中的特殊的接口。說它是標準 MBean, 是因為其向外部公開其接口的方法和普通的 Java Bean 相同,是通過 lexical,或者說 coding convention 進行的。下面我們就用一個例子來展現,如何實現一個標準 MBean 來監控某個服務器 ServerImpl 狀態的。ServerImpl 代表了用來演示的某個 Server 的實現:

    1

    2

    3

    4

    5

    6

    7

    package standardbeans;

    public class ServerImpl {

    ???public final long startTime;

    ???public ServerImpl() {

    ???????startTime = System.currentTimeMillis();

    ???}

    }

    然后,我們打算使用一個標準 MBean,ServerMonitor 來監控 ServerImpl:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    package standardbeans;

    public class ServerMonitor implements ServerMonitorMBean {

    ???private final ServerImpl target;

    ???public ServerMonitor(ServerImpl target){

    ???????this.target = target;

    ???}

    ???public long getUpTime(){

    ???????return System.currentTimeMillis() - target.startTime;

    ???}

    }

    這里的 ServerMonitorBean 又是怎么回事呢? MXBean 規定了標準 MBean 也要實現一個接口,所有向外界公開的方法都要在這個接口中聲明。否則,管理系統就不能從中獲得相應的信息。此外,該接口的名字也有一定的規范:即在標準 MBean 類名之后加上“MBean”后綴。若 MBean 的類名叫做 MBeansName 的話,對應的接口就要叫做 MBeansNameMBean。

    對于管理系統來說,這些在 MBean 中公開的方法,最終會被 JMX 轉化成屬性(Attribute)、監聽(Listener)和調用(Invoke)的概念。如果讀者對 Java Bean 有一些了解的話,不難看出,public long getUpTime()對應了 Bean 中的一個稱為“upTime”的只讀屬性。

    下面我們就看一個模擬管理系統的例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    package standardbeans;

    import javax.management.MBeanServer;

    import javax.management.MBeanServerFactory;

    import javax.management.ObjectName;

    public class Main {

    ???private static ObjectName objectName ;

    ???private static MBeanServer mBeanServer;

    ???public static void main(String[] args) throws Exception{

    ???????init();

    ???????manage();??????????????

    ???}

    ???private static void init() throws Exception{

    ???????ServerImpl serverImpl = new ServerImpl();

    ???????ServerMonitor serverMonitor = new ServerMonitor(serverImpl);

    ???????mBeanServer = MBeanServerFactory.createMBeanServer();

    ???????objectName = new ObjectName("objectName:id=ServerMonitor1");

    ???????mBeanServer.registerMBean(serverMonitor,objectName);?

    ???}

    ???private static void manage() throws Exception{

    ???????Long upTime = (Long) mBeanServer.getAttribute(objectName,

    ???????"upTime");

    ???????System.out.println(upTime);

    ???}

    }

    JMX 的核心是 MBServer。Java SE 已經提供了一個默認實現,可以通過?MBServerFactory.createMBeanServer()獲得。每個資源監控者(MBean)一般都會有名稱(ObjectName), 登記在 MBServer 內部的一個 Repository 中。注意,這個 ObjectName 對于每一個 MBServer 必須是唯一的,只能對應于一個 MBean。(讀者有興趣的話,可以試著再給 mBeanServer 注冊一個同名的 objectName,看看會怎么樣。) 上述例子是在?init()方法中完成向 MBeanServer 注冊工作的。

    在管理過程中,管理系統并不與資源或者 SubAgent 直接打交道,也就是說,這里不會直接引用到 MBean。而是通過 MBeanServer 的?getAttribute方法取得對應 MBean 的屬性的。

    動態 MBean

    但是對于很多已有的 SubAgent 實現,其 Coding Convention 并不符合標準 MBean 的要求。重構所有這些 SubAgent 以符合標準 MBean 標準既費力也不實際。JMX 中給出了動態(Dynamic) MBean 的概念,MBServer 不再依據 Coding Convention 而是直接查詢動態 MBean 給出的元數據(meta data)以獲得 MBean 的對外接口。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    package dynamicbeans;

    ?

    import javax.management.*;

    import java.lang.reflect.*;

    public class ServerMonitor implements DynamicMBean {

    ?

    ???private final ServerImpl target;???

    ???private MBeanInfo mBeanInfo;???

    ????????

    ???public ServerMonitor(ServerImpl target){

    ???????this.target = target;

    ???}

    ????

    ???// 實現獲取被管理的 ServerImpl 的 upTime

    ???public long upTime(){

    ???????return System.currentTimeMillis() - target.startTime;

    ???}

    ?

    ????//javax.management.MBeanServer 會通過查詢 getAttribute("Uptime") 獲得 "Uptime" 屬性值

    ???public Object getAttribute(String attribute) throws AttributeNotFoundException,

    ????????MBeanException, ReflectionException {

    ???????if(attribute.equals("UpTime")){

    ???????????return upTime();

    ???????}

    ???????return null;

    ???}

    ????

    ????// 給出 ServerMonitor 的元信息。?

    ???public MBeanInfo getMBeanInfo() {

    ???????if (mBeanInfo == null) {

    ???????????try {

    ???????????????Class cls = this.getClass();

    ???????????????// 用反射獲得 "upTime" 屬性的讀方法

    ???????????????Method readMethod = cls.getMethod("upTime", new Class[0]);

    ???????????????// 用反射獲得構造方法

    ???????????????Constructor constructor = cls.getConstructor(new Class[]

    ????????????????????{ServerImpl.class});

    ???????????????// 關于 "upTime" 屬性的元信息 : 名稱為 UpTime,只讀屬性 ( 沒有寫方法 )。

    ???????????????MBeanAttributeInfo upTimeMBeanAttributeInfo = new MBeanAttributeInfo(

    ???????????????????????"UpTime", "The time span since server start",

    ???????????????????????readMethod, null);

    ???????????????// 關于構造函數的元信息

    ???????????????MBeanConstructorInfo mBeanConstructorInfo = new MBeanConstructorInfo(

    ???????????????????????"Constructor for ServerMonitor", constructor);

    ???????????????//ServerMonitor 的元信息,為了簡單起見,在這個例子里,

    ???????????????// 沒有提供 invocation 以及 listener 方面的元信息

    ???????????????mBeanInfo = new MBeanInfo(cls.getName(),

    ???????????????????????"Monitor that controls the server",

    ???????????????????????new MBeanAttributeInfo[] { upTimeMBeanAttributeInfo },

    ???????????????????????new MBeanConstructorInfo[] { mBeanConstructorInfo },

    ???????????????????????null, null);???????????????

    ???????????} catch (Exception e) {

    ???????????????throw new Error(e);

    ???????????}

    ?

    ???????}

    ???????return mBeanInfo;

    ???}

    ?

    ???public AttributeList getAttributes(String[] arg0) {???????

    ???????return null;

    ???}

    ????????

    ???public Object invoke(String arg0, Object[] arg1, String[] arg2)

    ????????throws MBeanException,

    ????????ReflectionException {???????

    ???????return null;

    ???}

    ?

    ???public void setAttribute(Attribute arg0) throws AttributeNotFoundException,

    ????????InvalidAttributeValueException, MBeanException, ReflectionException {

    ???????return;???????

    ???}

    ?

    ???public AttributeList setAttributes(AttributeList arg0) {???????

    ???????return null;

    ???}??

    }

    其它動態 MBean

    另外還有兩類 MBean:Open MBean 和 Model MBean。實際上它們也都是動態 MBean。

    Open MBean 與其它動態 MBean 的唯一區別在于,前者對其公開接口的參數和返回值有所限制 —— 只能是基本類型或者?javax.management.openmbean包內的 ArrayType、CompositeType、TarbularType 等類型。這主要是考慮到管理系統的分布,很可能遠端管理系統甚至 MBServer 層都不具有 MBean 接口中特殊的類。

    Model Bean

    然而,普通的動態 Bean 通常缺乏一些管理系統所需要的支持:比如持久化 MBean 的狀態、日志記錄、緩存等等。如果讓用戶去一一實現這些功能確實是件枯燥無聊的工作。為了減輕用戶的負擔,JMX 提供商都會提供不同的 ModelBean 實現。其中有一個接口是 Java 規范中規定所有廠商必須實現的:javax.management.modelmbean.RequiredModelBean。通過配置 Descriptor 信息,我們可以定制這個 Model Bean, 指定哪些 MBean 狀態需要記入日志、如何記錄以及是否緩存某些屬性、緩存多久等等。這里,我們以 RequiredModelBean 為例討論 ModelBean。比如,我們先來看一個例子,首先是 server 端:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    package modelmbean;

    ?

    public class Server {

    ?

    ????private long startTime;

    ????

    ????public Server() {?? }

    ????

    ????public int start(){

    ????????startTime = System.currentTimeMillis();

    ????????return 0;

    ????}

    ????

    ????public long getUpTime(){

    ????????return System.currentTimeMillis() - startTime;

    ????}

    }

    然后我們對它的監測如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    package modelmbean;

    ?

    import javax.management.*;

    import javax.management.modelmbean.*;

    public class Main {

    ?

    ????public static void main(String[] args) throws Exception{

    ????????MBeanServer mBeanServer = MBeanServerFactory.createMBeanServer();

    ????????RequiredModelMBean serverMBean =

    ????????????(RequiredModelMBean) mBeanServer.instantiate(

    ????????????"javax.management.modelmbean.RequiredModelMBean");

    ?

    ????????ObjectName serverMBeanName =

    ????????????new ObjectName("server: id=Server");

    ????????serverMBean.setModelMBeanInfo(getModelMBeanInfoForServer(serverMBeanName));

    ????????Server server = new Server();

    ????????serverMBean.setManagedResource(server, "ObjectReference");

    ?

    ????????ObjectInstance registeredServerMBean =

    ????????????mBeanServer.registerMBean((Object) serverMBean, serverMBeanName);

    ?

    ????????serverMBean.invoke("start",null, null);

    ?

    ????????Thread.sleep(1000);

    ?

    ????????System.out.println(serverMBean.getAttribute("upTime"));

    ????????Thread.sleep(5000);

    ????????System.out.println(serverMBean.getAttribute("upTime"));

    ????}

    ?

    ????private static ModelMBeanInfo getModelMBeanInfoForServer(ObjectName objectName)

    ????????throws Exception{

    ????????ModelMBeanAttributeInfo[] serverAttributes =

    ????????????new ModelMBeanAttributeInfo[1];

    ????????Descriptor upTime =

    ????????????new DescriptorSupport(

    ????????????new String[] {

    ????????????????"name=upTime",

    ????????????????"descriptorType=attribute",

    ????????????????"displayName=Server upTime",

    ????????????????"getMethod=getUpTime",??????????

    ????????????});

    ????????????serverAttributes[0] =

    ????????????????new ModelMBeanAttributeInfo(

    ????????????????"upTime",

    ????????????????"long",

    ????????????????"Server upTime",

    ????????????????true,

    ????????????????false,

    ????????????????false,

    ????????????upTime);

    ?

    ????????ModelMBeanOperationInfo[] serverOperations =

    ????????????new ModelMBeanOperationInfo[2];

    ?

    ????????Descriptor getUpTimeDesc =

    ????????????new DescriptorSupport(

    ????????????new String[] {

    ????????????????"name=getUpTime",

    ????????????????"descriptorType=operation",

    ????????????????"class=modelmbean.Server",

    ????????????????"role=operation"?????????

    ????????????});

    ?

    ????????MBeanParameterInfo[] getUpTimeParms = new MBeanParameterInfo[0];

    ????????serverOperations[0] = new ModelMBeanOperationInfo("getUpTime",

    ????????????"get the up time of the server",

    ????????????getUpTimeParms,

    ????????????"java.lang.Long",

    ????????????MBeanOperationInfo.ACTION,

    ????????getUpTimeDesc);

    ?????

    ????????Descriptor startDesc =

    ????????????new DescriptorSupport(

    ????????????new String[] {

    ????????????????"name=start",

    ????????????????"descriptorType=operation",

    ????????????????"class=modelmbean.Server",

    ????????????????"role=operation"

    ????????????});

    ????????MBeanParameterInfo[] startParms = new MBeanParameterInfo[0];

    ????????serverOperations[1] = new ModelMBeanOperationInfo("start",

    ????????????"start(): start server",

    ????????????startParms,

    ????????????"java.lang.Integer",

    ????????????MBeanOperationInfo.ACTION,

    ????????startDesc);

    ?

    ????????ModelMBeanInfo serverMMBeanInfo =

    ????????????new ModelMBeanInfoSupport(

    ????????????"modelmbean.Server",

    ????????????"ModelMBean for managing an Server",

    ????????????serverAttributes,

    ????????????null,

    ????????????serverOperations,

    ????????null);

    ?

    ????????//Default strategy for the MBean.

    ????????Descriptor serverDescription =

    ????????????new DescriptorSupport(

    ????????????new String[] {

    ????????????????("name=" + objectName),

    ????????????????"descriptorType=mbean",

    ????????????????("displayName=Server"),

    ????????????????"type=modelmbean.Server",

    ????????????????"log=T",

    ????????????????"logFile=serverMX.log",

    ????????????????"currencyTimeLimit=10" });

    ????????serverMMBeanInfo.setMBeanDescriptor(serverDescription);

    ????????return serverMMBeanInfo;

    ????}

    很明顯,和其它 MBean 類似,使用 Model MBean 的過程也是下面幾步:

  • 創建一個 MBServer:mBeanServe
  • 獲得管理資源用的 MBean:serverBean
  • 給這個 MBean 一個 ObjectName:serverMBeanName
  • 將 serverBean 以 serverMBeanName 注冊到 mBeanServer 上去
  • 唯一不同的是,ModelMBean 需要額外兩步 :

    1

    2

    1.serverMBean.setModelMBeanInfo(getModelMBeanInfoForServer(serverMBeanName));

    2.serverMBean.setManagedResource(server, "ObjectReference");

    第一步用于提供 serverMBean 的元數據,主要包括以下兩類

  • 類似于普通的動態 MBean,需要 MBean 的 Attribute、Invocation、Notification 的類型 / 反射信息,諸如返回類型、參數類型和相關的 get/set 方法等。這里將不再贅述。
  • 關于緩存、持久化以及日志等的策略。后面我們將介紹一些這方面的信息。
  • 第二步指出了 ServerMBean 管理的對象,也就是說,從元數據中得到的 Method 將施加在哪個 Object 上。需要指出的是?setManagedResource(Object o, String type);中第二個參數是 Object 類型,可以是 "ObjectReference"、"Handle"、"IOR"、"EJBHandle" 或 "RMIReference"。目前 SE 中的實現只支持 "ObjectReference"。筆者認為后面幾種類型是為了將來 JMX 管理對象擴展而設定的,可能將來 Model Bean 不僅可以管理 Plain Java Object(POJO),還可能管理 Native Resource, 并給諸如 EJB 和 RMI 對象的管理提供更多的特性。

    Model Bean 與普通動態 Bean 區別在于它的元數據類型 ModelMBeanInfo 擴展了前者的 MBeanInfo,使得 ModelMBeanOperationInfo、ModelMBeanConstructor_Info、ModelMBeanAttributeInfo 和 ModelMBeanNotificationInfo 都有一個額外的元數據:javax.management.Descriptor,它是用來設定 Model Bean 策略的。數據的存儲是典型的 "key-value" 鍵值對。不同的 Model Bean 實現,以及不同的 MBeanFeatureInfo 支持不同的策略特性。下面我們就以 Attribute 為例,看一下 RequiredModelBean 支持的策略。

    首先,它最重要的 Descriptor 主要是 name、displayName 和 descriptorType,其中 name 是屬性名稱。"name" 要與對應 ModelMBeanAttributeInfo 的 name 相同。descriptorType 必須是 "attribute"。

    另外,value、default、legalValues "value" 是用來設定初始值的,"default" 指當不能從 resource 中獲得該屬性時的默認返回值,"legalValues" 是一組合法的屬性數據。它并不用來保證 setAttribute 的數據一致性,而是在 UI 系統,如 JConsole 中提示用戶可能的數據輸入。

    在屬性訪問的 getMethod, setMethod 方法上,事實上所有對屬性的訪問都會被 delegate 給同一 MBeanInfo 中特定的 Operation。 getMethod/setMethod 給出了對應的 ModelMBeanOperationInfo 名稱。

    還有一些額外的屬性,比如:persistPolicy, persistPeriod 是代表了持久化策略;currencyTimeLimit, lastUpdatedTimeStamp 緩存策略;iterable 屬性是否必須使用 iterate 來訪問。默認為否;protocolMap 定義了與第三方系統有關的數據轉換的 data model;visibility 定義了與第三方 UI 系統有關的 MBean 如何顯示的策略;presentationString 也是定義了與第三方 UI 系統有關的 MBean 如何顯示策略,比如 "presentation=server.gif"。

    事實上,策略特性有兩個層次的作用域:整個 Model Bean 和特定的 MBeanFeature。

    Model Bean 的策略描述會被施加到該 Model Bean 的所有 MBeanFeature 上去,除非該 MBeanFeature 重寫了這個策略特性。

    在上面的例子里,這一個語句:

    1

    serverMMBeanInfo.setMBeanDescriptor(serverDescription);

    給整個 serverMBeanInfo 設了一個策略描述 serverDescription,其中用 "currencyTimeLimit=10" 指出屬性的緩存時間是 10 秒。所以,在 Main 方法中,兩次 serverMBean.getAttribute("upTime");之間的間隔小于 10 秒就會得到同樣的緩存值。

    如果我們不想讓 "upTime" 這個屬性被緩存,我們可以在它的策略描述中加入 "currencyTimeLimit=-1":

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    Descriptor upTime =??? new DescriptorSupport(

    ???????????????new String[] {

    ?????????????????"name=upTime",

    ?????????????????"descriptorType=attribute",

    ?????????????????"displayName=Server upTime",

    ?????????????????"getMethod=getUpTime",

    ?????????????????"currencyTimeLimit=-1" // 不需要緩存

    ??????????????????});

    ?

    Descriptor getUpTimeDesc =

    ?????????????new DescriptorSupport(

    ???????????????new String[] {

    ?????????????????"name=getUpTime",

    ?????????????????"descriptorType=operation",

    ?????????????????"class=modelmbean.Server",

    ?????????????????"role=operation"

    ?????????????????,"currencyTimeLimit=-1" // 不需要緩存

    ?????????????});

    getUpTimeDesc 也要改動的原因是 RequiredModelBean 會把獲取 upTime 屬性的工作 delegate 給 getUpTime invocation。只要其中一處使用 MBean 級的緩存策略,就沒法獲得實時 upTime 數據了。

    虛擬機檢測

    JMX 與虛擬機檢測

    JMX 的提出,為 Java 虛擬機提供了 Java 層上的檢測機制。J2SE 中,新提出的?java.lang.management包即是 JMX 在 JDK 的一個應用,它提供了大量的有用的接口,通過 MBean 方式,提供了對 Java 虛擬機和運行時遠端的監控和檢測方式,來幫助用戶來檢測本地或者遠端的虛擬機的運行情況。有了 JMX 之后,我們可以設計一個客戶端,來檢測遠端一個正在運行的虛擬機中的線程數、線程當前的 Stack、內存管理、GC 所占用的時間、虛擬機中的對象和當前虛擬機參數等重要的參數和運行時信息。JMX 另外的一個重要功能是對配置信息的檢測和再配置。比如,我們可以在遠端查看和修改當前 JVM 的 verbose 參數,以達到動態管理的目的。甚至,我們可以在遠端指揮 JVM 做一次 GC,這在下文中有詳細介紹。

    JMX 提供的虛擬機檢測 API

    檢測虛擬機當前的狀態總是 Java 開放人員所關心的,也正是因為如此,出現了大量的 profiler 工具來檢測當前的虛擬機狀態。從 Java SE 5 之后,在 JDK 中,我們有了一些 Java 的虛擬機檢測 API,即?java.lang.management包。Management 包里面包括了許多 MXBean 的接口類和 LockInfo、MemoryUsage、MonitorInfo 和 ThreadInfo 等類。從名字可以看出,該包提供了虛擬機內存分配、垃圾收集(GC)情況、操作系統層、線程調度和共享鎖,甚至編譯情況的檢測機制。這樣一來,Java 的開發人員就可以很簡單地為自己做一些輕量級的系統檢測,來確定當前程序的各種狀態,以便隨時調整。

    要獲得這些信息,我們首先通過?java.lang.management.ManagementFactory這個工廠類來獲得一系列的 MXBean。包括:

    • ClassLoadingMXBean

      ClassLoadMXBean 包括一些類的裝載信息,比如有多少類已經裝載 / 卸載(unloaded),虛擬機類裝載的 verbose 選項(即命令行中的 Java – verbose:class 選項)是否打開,還可以幫助用戶打開 / 關閉該選項。

    • CompilationMXBean

      CompilationMXBean 幫助用戶了解當前的編譯器和編譯情況,該 mxbean 提供的信息不多。

    • GarbageCollectorMXBean

      相對于開放人員對 GC 的關注程度來說,該 mxbean 提供的信息十分有限,僅僅提供了 GC 的次數和 GC 花費總時間的近似值。但是這個包中還提供了三個的內存管理檢測類:MemoryManagerMXBean,MemoryMXBean 和 MemoryPoolMXBean。

      • MemoryManagerMXBean

        這個類相對簡單,提供了內存管理類和內存池(memory pool)的名字信息。

      • MemoryMXBean

        這個類提供了整個虛擬機中內存的使用情況,包括 Java 堆(heap)和非 Java 堆所占用的內存,提供當前等待 finalize 的對象數量,它甚至可以做 gc(實際上是調用 System.gc)。

      • MemoryPoolMXBean

        該信息提供了大量的信息。在 JVM 中,可能有幾個內存池,因此有對應的內存池信息,因此,在工廠類中,getMemoryPoolMXBean() 得到是一個 MemoryPoolMXBean 的 list。每一個 MemoryPoolMXBean 都包含了該內存池的詳細信息,如是否可用、當前已使用內存 / 最大使用內存值、以及設置最大內存值等等。

    • OperatingSystemMXBean

      該類提供的是操作系統的簡單信息,如構架名稱、當前 CPU 數、最近系統負載等。

    • RuntimeMXBean

      運行時信息包括當前虛擬機的名稱、提供商、版本號,以及 classpath、bootclasspath 和系統參數等等。

    • ThreadMXBean

      在 Java 這個多線程的系統中,對線程的監控是相當重要的。ThreadMXBean 就是起到這個作用。ThreadMXBean 可以提供的信息包括各個線程的各種狀態,CPU 占用情況,以及整個系統中的線程狀況。從 ThreadMXBean 可以得到某一個線程的 ThreadInfo 對象。這個對象中則包含了這個線程的所有信息。

    java.lang.management 和虛擬機的關系

    我們知道,management 和底層虛擬機的關系是非常緊密的。其實,有一些的是直接依靠虛擬機提供的公開 API 實現的,比如 JVMTI;而另外一些則不然,很大一塊都是由虛擬機底層提供某些不公開的 API / Native Code 提供的。這樣的設計方式,保證了 management 包可以提供足夠的信息,并且使這些信息的提供又有足夠的效率;也使 management 包和底層的聯系非常緊密。

    Java 6 中的 API 改進

    Management 在 Java SE 5 被提出之后,受到了歡迎。在 Java 6 當中,這個包提供更多的 API 來更好地提供信息。

    OperatingSystemMXBean. getSystemLoadAverage()

    Java 程序通常關注是虛擬機內部的負載、內存等狀況,而不考慮整個系統的狀況。但是很多情況下,Java 程序在運行過程中,整個計算機系統的系統負荷情況也會對虛擬機造成一定的影響。隨著 Java 的發展,Java 程序已經覆蓋了各個行業,這一點也必須得到關注。在以前,利用 Native 代碼來檢測系統負載往往是唯一的選擇,但是在 Java 6 當中,JDK 自己提供了一個輕量級的系統負載檢測 API,即?OperatingSystemMXBean.getSystemLoadAverage()。

    當然這個 API 事實上僅僅返回一個對前一分鐘系統負載的簡單的估測。它設計的主要目標是簡單快速地估測當前系統負荷,因此它首先保證了這個 API 的效率是非常高的;也因為如此,這個 API 事實上并不適用于所有的系統。

    鎖檢測

    我們知道,同步是 Java 語言很重要的一個特性。在 Java SE 中,最主要的同步機制是依靠 synchronize 關鍵字對某一個對象加鎖實現的;在 Java SE 5 之后的版本中,concurrent 包的加入,大大強化了 Java 語言的同步能力,concurrent 提供了很多不同類型的鎖機制可供擴展。因此,要更好地觀測當前的虛擬機狀況和不同線程的運行態,去觀察虛擬機中的各種鎖,以及線程與鎖的關系是非常必要的。很可惜的是,在過去的 JDK 中,我們并沒有非常方便的 API 以供使用。一個比較直接的檢測方式是查看線程的 stack trace,更為強大全面(但是也更復雜并且效率低下)的方案是得到一個 VM 所有對象的快照并查找之,這些策略的代價都比較大,而且往往需要編寫復雜的 Native 代碼。

    JDK 6 里提供了一些相當簡單的 API 來提供這個服務。首先了解兩個新類,LockInfo 和 MonitorInfo 這兩個類承載了鎖的信息。LockInfo 可以是任何的 Java 鎖,包括簡單 Java 鎖和?java.util.concurrent包中所使用的鎖(包括 AbstractOwnableSynchronizer 和 Condition 的實現類 / 子類),而 MonitorInfo 是簡單的 Java 對象所代表的鎖。要檢測一個線程所擁有的鎖和等待的鎖,首先,要得到一個線程的 ThreadInfo,然后可以簡單地調用:

    • getLockedMonitors()

      返回一個所有當前線程已經掌握的鎖對象的列表。

    • getLockedSynchronizers()

      對于使用 concurrent 包的線程,返回一個該線程所掌握的“ownable synchronizer”(即 AbstractOwnableSynchronizer 及其子類)所組成的列表。

    • getLockInfo()

      當前線程正在等待的那個鎖對象的信息就可以知道線程所有的鎖信息。通過這些鎖信息,我們很方便的可以知道當前虛擬機的所有線程的鎖信息。由此,我們還可以推導出更多的信息。

    死鎖檢測

    死鎖檢測一直以來是軟件工程師所重視的,顯然一個死鎖的系統永遠是工程師最大的夢魘。Java 程序的死鎖檢測也一直以來是 Java 程序員所頭痛的。為了解決線程間死鎖問題,一般都有預防(代碼實現階段)和死鎖后恢復(運行時)兩種方式。以前 Java 程序員都重視前者,因為在運行態再來檢測和恢復系統是相當麻煩的,缺少許多必要的信息;但是,對于一些比較復雜的系統,采取后者或者運行時調試死鎖信息也是非常重要的。由上面所說,現在我們已經可以知道每一個線程所擁有和等待的鎖,因此要計算出當前系統中是否有死鎖的線程也是可行的了。當然,Java 6 里面也提供了一個 API 來完成這個功能,即:

    • ThreadMXBean.findDeadlockedThreads()

      這個函數的功能就是檢測出當前系統中已經死鎖的線程。當然,這個功能復雜,因此比較費時。基本上僅僅將之用于調試,以便對復雜系統線程調用的改進。

    未來的發展

    JMX 在 Java SE 5/6 中的功能已經相當強大,但是距離 Java 程序開發人員的要求還是有一段距離,因此 Sun 公司已經向 JCP 提出了 JSR 255 (JMX API 2.0 版本)來擴充和進一步發展 JMX,并希望這個 JSR 將在 Java SE 7 中實現。在這個文檔中,新的 JMX 2.0 將著重于:

    • 對 management 模型的優化,并提供更好的支持;加入了比如 annotation 等等的新特性;
    • 對 JMX 定義的優化,在進一步強化 MBean 擴充性好的優點的同時,盡量改變(用戶普遍認為的)MBean 很難實現的缺點;
    • 對非 Java 平臺客戶端的支持。這將是一個令人振奮的新特性;

    具體的擴展可能包括:

    • 層次性的命名域(Hierarchical namespace);
    • 新的事件服務功能;
    • 對 locales 的新支持;
    • 為 MBean 啟用 annotation 服務;
    • 也可以使用用戶類型的 mapping 了;

    可以看到,JMX 的進一步發展主要關注的是可擴展性、動態性和易用性等 Java 用戶非常關注的方面。

    總結

    在 Java SE 5 出現的 JMX 在 Java SE 6 中有了更多的功能和擴展能力,這很好地適應了 Java 語言的發展和用戶的要求,讓 Java 的監測、管理的的功能更加強大。

    相關主題

    • 閱讀?Java SE 6 新特性系列文章的完整列表,了解 Java SE 6 其它重要的增強。
    • Java 理論與實踐 : 用 JMX 檢測應用程序(developerWorks,Brian Goetz,2006 年 10 月):這篇實踐性的文章介紹了如何使用 Java SE 5 中 JMX API 來檢測 Web 服務器和應用程序。
    • 從黑箱到企業系列(developerWorks,Sing Li,2002 年):這是一個分為三部分的系列文章,介紹 Java 管理擴展(Java Management Extension ,JMX)。
    • 擴展 Spring 的 JMX 支持(developerWorks,Claude Duguay,2005 年 11 月):本文介紹了 Spring 1.2 中包括高級的 JMX 集成支持。
    • Java SE 6 文檔:Java SE 6 的規范文檔,可以找到絕大部分新特性的官方說明。
    • NTLM 身份驗證微軟 TechNet 相關介紹 NTLM 的文章
    • RFC 2109、RFC 2965:關于 Cookie 的兩個 RFC

    from:https://www.ibm.com/developerworks/cn/java/j-lo-jse63/index.html?

    總結

    以上是生活随笔為你收集整理的JMX 与系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    美女网站视频久久 | 久久久久久久久艹 | 国产黄色av影视 | 免费观看的av | 国产高清在线不卡 | 日韩二区三区在线观看 | 粉嫩av一区二区三区四区在线观看 | 国产视频资源在线观看 | 亚洲另类在线视频 | 亚洲天天在线日亚洲洲精 | 日本公妇在线观看 | 日韩 精品 一区 国产 麻豆 | 成年人免费在线观看网站 | 天天干天天操天天做 | 亚洲成人家庭影院 | av在线收看| 国产毛片aaa | 国产精品久久久久久久妇 | 97在线资源 | 国产视频日韩视频欧美视频 | 日本精品一区二区三区在线观看 | 色综合久久综合中文综合网 | 久99久中文字幕在线 | 久久久91精品国产一区二区精品 | 亚洲成av人片在线观看无 | 免费看的视频 | 狠狠网亚洲精品 | 成人欧美一区二区三区黑人麻豆 | 国产精品欧美在线 | 中文字幕三区 | 夜夜澡人模人人添人人看 | 国产v在线观看 | 国产亚洲成人网 | www.香蕉视频在线观看 | 国产精品日韩久久久久 | 狠狠色丁香婷婷综合基地 | 五月婷婷色播 | 91色吧| 久久精品亚洲精品国产欧美 | 欧美日韩一区久久 | 97视频免费| 国产日韩欧美在线 | 久久9精品| 国产91精品一区二区麻豆亚洲 | 国产黄| 欧美在线a视频 | 国产拍在线| 人人草人 | 日韩美av在线 | 国产精品成人自产拍在线观看 | 免费视频a | av免费网站在线观看 | 色综合久久88色综合天天 | 国产成人一区二区三区 | 亚洲精品色婷婷 | 色婷婷狠狠五月综合天色拍 | 一级黄色a视频 | 天天射网| 五月天高清欧美mv | 不卡的av在线播放 | 久久无码精品一区二区三区 | 中文字幕中文字幕在线中文字幕三区 | avwww在线| 亚洲欧美日韩中文在线 | 国产福利一区在线观看 | 午夜久久久影院 | 久久69精品久久久久久久电影好 | 国产精品国产三级在线专区 | 午夜精品一区二区三区四区 | 亚洲国产成人久久 | 成人日批视频 | 在线观看免费一级片 | 香蕉网在线观看 | 天天操天天摸天天爽 | 中文字幕第 | 亚洲va欧美va | 日韩在线免费视频 | 九九精品久久 | 久久精品国产免费看久久精品 | 日日干美女 | 国产精品国产三级在线专区 | 久久亚洲私人国产精品 | 国产亚洲精品久久久久久无几年桃 | 日韩视频在线不卡 | 91色偷偷 | 亚洲精品在线网站 | av福利免费 | 狠狠躁日日躁狂躁夜夜躁av | 91精品国产一区二区在线观看 | 亚洲精品电影在线 | 久久久久久综合网天天 | 精品国产_亚洲人成在线 | 国产精品21区 | av三级在线播放 | 丁香 婷婷 激情 | 日韩视频在线不卡 | 欧美黑人性猛交 | 黄色亚洲片| 亚洲播播| 天天弄天天干 | 久久综合中文字幕 | 欧美黑人xxxx猛性大交 | 日韩在线网址 | 欧美日韩天堂 | 国产精品乱码高清在线看 | 最近中文字幕免费观看 | 久久国际影院 | 91亚洲精品久久久蜜桃网站 | 日韩中文字幕国产 | 亚洲第一av在线 | 欧美另类视频 | 999日韩 | 日韩精品一区二区在线视频 | 久热免费 | 日韩中文字幕电影 | 久久久久亚洲精品成人网小说 | 欧美一区二区精美视频 | 操天天操| 麻豆小视频在线观看 | 久亚洲 | 久久天天躁夜夜躁狠狠躁2022 | 九九精品视频在线看 | 欧美日韩精品在线观看视频 | 亚洲精品国精品久久99热 | 三级视频片 | 国产日本三级 | 九九热只有这里有精品 | 久久国语露脸国产精品电影 | 国产精品国产三级国产aⅴ入口 | 97免费中文视频在线观看 | 中文字幕在线看视频 | www久久com | 国产精彩视频一区 | 天天摸天天弄 | 最新av在线免费观看 | 久久精品久久精品 | 日韩激情片在线观看 | 日本特黄一级 | 麻豆小视频在线观看 | 久久伊人操 | 97人人人人 | 九九热在线观看视频 | 免费成人av| 日韩免费一级a毛片在线播放一级 | 久青草国产在线 | 色妞色视频一区二区三区四区 | 欧美日韩视频免费 | 精品国产美女 | 日本久久成人 | 福利区在线观看 | 国产综合在线观看视频 | 国产伦理精品一区二区 | 国产老熟| 黄色毛片一级 | 日韩电影中文字幕在线观看 | 日本一区二区三区免费看 | 亚洲日本一区二区在线 | 伊人色综合网 | 欧美一区二区三区在线看 | 波多野结衣在线播放一区 | 色综合久久中文字幕综合网 | 成人app在线免费观看 | 久久综合久久综合这里只有精品 | 国产精品乱码高清在线看 | 四虎5151久久欧美毛片 | 国产色视频123区 | 欧美日韩中文在线视频 | 日韩av片在线 | 国产成人精品久久二区二区 | av片无限看 | 综合久久久久 | 天天色天天操综合 | 亚洲精品一区二区三区在线观看 | 国产精品午夜久久 | 99久久精品一区二区成人 | 日韩二三区 | 中文字幕在线视频一区二区三区 | 伊甸园永久入口www 99热 精品在线 | 免费亚洲精品 | 久久色视频 | 美女视频黄是免费的 | 一性一交视频 | 黄色三级在线观看 | 久久综合久久八八 | 亚洲欧美少妇 | av一级片在线观看 | 亚洲成熟女人毛片在线 | 色中色亚洲 | 国产美女精品视频 | 免费高清在线一区 | 国产亚洲精品成人av久久影院 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产一卡二卡四卡国 | 黄色av电影免费观看 | 国产精品久久久久久久久久久杏吧 | www,黄视频| 97成人资源站 | 久99精品| 美女久久久久 | 亚洲视频1 | 日本特黄特色aaa大片免费 | 人人超碰在线 | 亚洲综合色av | 免费看精品久久片 | 99久久久久久久久久 | 免费福利在线 | 不卡日韩av | 日韩精品中文字幕在线不卡尤物 | 国产中文字幕在线看 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 午夜精选视频 | 成人av手机在线 | 午夜影院日本 | 日日爽天天 | 欧美91在线 | 久久精品在线视频 | 免费三级av | 国产国语在线 | 在线看日韩av | 免费视频一区二区 | 久久久久高清 | 国产在线不卡精品 | 二区视频在线观看 | 午夜在线免费视频 | 人人操日日干 | 五月婷婷另类国产 | 成年人视频在线观看免费 | 精品国偷自产国产一区 | 亚洲午夜精品在线观看 | 国产视频美女 | 三级在线国产 | 日韩精品视频在线免费观看 | 婷婷国产一区二区三区 | 欧美精品一区二区在线播放 | 国产精品中文字幕在线观看 | 久久成人精品电影 | 超碰成人网 | 午夜精品久久久久久久久久久久 | 色婷婷电影 | 欧美精品一区二区三区四区在线 | av播放在线 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 久久天天躁夜夜躁狠狠85麻豆 | 精品国产精品国产偷麻豆 | 91九色国产视频 | 免费大片黄在线 | 激情综合五月婷婷 | 中文字幕乱视频 | 免费在线一区二区 | 伊人久久av | 国产精品久久久久久久久久久久 | 国产精品自产拍 | 久久久夜色 | 69亚洲视频| 黄色一集片 | 人人爽人人插 | 亚洲永久av | 成人一级片视频 | 国产一级免费观看视频 | 91精品福利在线 | 国产一级性生活视频 | 国产韩国日本高清视频 | 国产字幕在线看 | 中文字幕在线观看完整版电影 | av+在线播放在线播放 | 日本三级不卡视频 | 国产123区在线观看 国产精品麻豆91 | 亚洲精品久久久久中文字幕m男 | 一区二区欧美日韩 | 国产精品美女视频网站 | 97超碰免费| 激情网站网址 | 三级黄色片子 | 久久久精品欧美一区二区免费 | 国产xx在线 | 韩国av免费在线 | 在线观看免费观看在线91 | 久久久久久久久久久久久久av | 精品国产一区二区三区四区vr | 天天色综合天天 | 五月婷婷综合在线观看 | 久久久久 免费视频 | 日韩免费在线观看视频 | 国产99免费视频 | 久久久久久久免费观看 | 1区2区视频 | 大胆欧美gogo免费视频一二区 | 亚州精品天堂中文字幕 | 射射射av | 天天色官网 | 久久精品高清 | 天天曰天天射 | 亚洲综合色av | 久久9999久久免费精品国产 | 国产在线免费 | 精品亚洲视频在线观看 | 久久69精品久久久久久久电影好 | 一区二区三区久久 | 中文有码在线视频 | 一本一道久久a久久综合蜜桃 | 亚洲成人精品国产 | 一区二区三区在线免费播放 | 日本中文字幕高清 | se视频网址 | 精品国产亚洲日本 | 成人黄色视 | 五月婷婷六月丁香 | 日韩网站在线看片你懂的 | 不卡的av电影 | 久久久久99精品成人片三人毛片 | 天天激情| 美女黄濒 | 伊人影院在线观看 | 欧美日韩中文国产一区发布 | 久久久亚洲国产精品麻豆综合天堂 | 日韩剧情 | 国内精品久久久 | 日日干美女| 亚洲热久久 | 天天爽天天射 | 国产精品免费观看在线 | 六月丁香婷婷网 | 亚洲影视资源 | 91成人精品观看 | 日日干天天干 | 在线看国产精品 | 亚洲精品视频在线观看免费视频 | 91九色成人 | 天天干,狠狠干 | 中文字幕欲求不满 | 免费高清在线观看成人 | 成人在线观看免费视频 | 成人三级网址 | 九九99靖品 | 日本性高潮视频 | 亚洲性少妇性猛交wwww乱大交 | 婷婷在线资源 | 在线小视频你懂得 | 色婷婷视频在线 | 91高清完整版在线观看 | 欧美一区二区三区免费观看 | 97精品一区二区三区 | 久久激情视频免费观看 | 欧美色就是色 | 天天操天天干天天摸 | 日韩理论电影网 | 亚洲视频免费在线观看 | 日韩资源在线 | 国产精品久久久久久婷婷天堂 | 欧美日韩视频一区二区三区 | 一区二区三区在线电影 | 狠狠的日| 免费特级黄色片 | 欧美有色 | 91中文字幕一区 | 国产亚洲精品久久久久久网站 | 成人免费大片黄在线播放 | 久久一区二区免费视频 | 日韩免费在线视频观看 | 日本一区二区三区免费看 | 美女视频久久黄 | 色99中文字幕 | 久久国产精品免费视频 | 久久久亚洲精品 | 日韩精品久久一区二区三区 | 亚洲国产日韩一区 | 天天干天天射天天插 | av在线播放一区二区三区 | 激情综合网天天干 | 黄色免费在线看 | av中文字幕网址 | av成人免费网站 | 国产精华国产精品 | 在线视频 成人 | 国产午夜在线 | 日本爱爱免费 | 亚州精品一二三区 | 亚洲欧美综合精品久久成人 | 婷婷亚洲五月色综合 | 日韩免费观看高清 | 99久久婷婷国产综合精品 | 免费久久精品视频 | 91视视频在线直接观看在线看网页在线看 | 一二三区视频在线 | 西西4444www大胆无视频 | 麻豆视频在线免费看 | av一区在线| 91久久丝袜国产露脸动漫 | 欧美污在线观看 | 美女视频国产 | 91亚洲精品久久久 | 欧美成年黄网站色视频 | 免费观看完整版无人区 | 免费精品人在线二线三线 | 成人黄色片在线播放 | 99国产精品一区二区 | 成人h动漫精品一区二 | 亚洲乱码中文字幕综合 | 97超碰在线久草超碰在线观看 | 夜夜夜夜操 | 国产精品2区 | 欧美日韩一区二区免费在线观看 | 日韩一级黄色片 | 91视频传媒 | 三级免费黄 | 九九九免费视频 | 91av九色 | 国产在线永久 | 玖玖视频| 一级片色播影院 | 中文字幕在线视频网站 | 久草在线这里只有精品 | 欧美性生交大片免网 | 精品福利国产 | 在线观看精品黄av片免费 | 日韩精品你懂的 | www国产一区 | 国产 中文 日韩 欧美 | 亚州av一区 | 91九色最新地址 | 日本精品一区二区 | 色噜噜狠狠色综合中国 | 福利一区视频 | 免费一级片视频 | 天天操天 | 美女精品网站 | 97视频在线观看网址 | 国产涩涩网站 | 日韩资源在线观看 | 久久久久亚洲精品国产 | 久久丁香网 | 国产欧美在线一区 | 日韩在线视频不卡 | 毛片www| 激情五月六月婷婷 | 国产精品系列在线播放 | 免费视频久久 | 国产在线观看网站 | 在线免费观看黄色av | 国产在线 一区二区三区 | 99精品福利 | 91桃色国产在线播放 | 日日碰狠狠躁久久躁综合网 | a在线观看免费视频 | 色婷婷播放 | 色综合天天视频在线观看 | 一区二区三区免费看 | 色www.| 欧美激情精品久久久久 | 500部大龄熟乱视频使用方法 | 国产91免费观看 | 在线看的av网站 | 在线欧美中文字幕 | 午夜精品麻豆 | 日韩欧美在线中文字幕 | 五月天亚洲激情 | 96久久欧美麻豆网站 | av片一区| 国产精品一区二区你懂的 | 欧美吞精 | 99热精品国产 | 探花视频免费观看 | 天天摸夜夜操 | 伊人狠狠色 | www.久久免费 | 精品一区二区免费视频 | 久久精品网站免费观看 | 中文亚洲欧美日韩 | 成人av在线直播 | 91大神视频网站 | 九九久久久久久久久激情 | 精品国产一区二区三区av性色 | 亚洲一区二区麻豆 | 久久国产精品99国产精 | 国产精品自产拍在线观看网站 | 精品在线观看国产 | 日本久久精品 | 国产精品九九九九九九 | 国产成人精品一区二三区 | a级片久久 | 国产精品一区二区免费看 | 免费看麻豆 | 欧美a√在线| 精品国产乱码久久久久久浪潮 | 日本高清dvd | 天天摸天天操天天爽 | 久久狠狠亚洲综合 | 一级理论片在线观看 | 亚洲国产精品日韩 | 午夜视频欧美 | 三级动图 | 国产精品手机视频 | 久久久高清一区二区三区 | 亚洲草视频 | 精品国产一区在线观看 | 一级淫片在线观看 | 亚洲视频免费视频 | 一区二区三区四区在线免费观看 | 国产夫妻自拍av | 久久精品女人毛片国产 | 手机看片中文字幕 | 99精品视频免费观看视频 | 在线看片91 | 天天爽天天碰狠狠添 | 岛国av在线免费 | 日本久久不卡视频 | 国产精品久久久久久久99 | 精品国产一区二区三区久久久蜜月 | www亚洲视频 | 免费在线观看日韩欧美 | 成人性生交视频 | 天天干天天插伊人网 | 国产亚洲精品久久久久久久久久 | 婷婷综合视频 | 91精品国自产在线观看欧美 | 97超碰超碰久久福利超碰 | 久草在线一免费新视频 | 92中文资源在线 | 91欧美日韩国产 | 在线一区观看 | 最新日韩电影 | 国产免费高清视频 | a天堂免费 | 91亚洲精品久久久 | av视屏在线| av在线影片| 国产中文字幕大全 | 9幺看片 | 日日天天av | 国产91影院| 综合婷婷 | 欧美另类一二三四区 | 欧美日韩精品免费观看 | 久久亚洲日本 | 丁香六月激情婷婷 | 亚洲人毛片 | 日韩黄色免费 | 久久九精品 | 久久人人97超碰精品888 | 国产精品video | 免费观看av网站 | 中文字幕在线精品 | 亚洲撸撸 | 天堂av网址 | 亚洲国产视频a | 欧美日韩精品免费观看 | 久久久999精品视频 国产美女免费观看 | 国产三级香港三韩国三级 | 国产一区精品在线 | av天天澡天天爽天天av | 国产精品久久久久久久久久久久 | 国产精品成人av久久 | 毛片888| 日日射天天射 | 国产xx在线 | 亚洲闷骚少妇在线观看网站 | 1000部国产精品成人观看 | 欧美国产三区 | 国产色综合 | 欧美日韩免费在线视频 | 在线电影 一区 | 毛片网在线观看 | 国产视频一区在线播放 | 久久精品一区二区三区中文字幕 | av片免费播放 | 制服丝袜欧美 | 在线天堂日本 | 一区二区成人国产精品 | 国产原创av片 | 久久综合视频网 | 伊人永久 | 国产精品免费久久久久久久久久中文 | 国产精品porn | 日韩精品中文字幕在线观看 | 国产精品久久久久久久午夜片 | 久久精品9 | 久草网站| 亚洲精品久久久蜜桃直播 | 欧美激情视频三区 | 在线免费观看黄色 | 免费中文字幕在线观看 | 国产免费一区二区三区最新6 | 天天色官网 | 久久久99精品免费观看乱色 | 久久精品国产精品亚洲 | 人人爽人人爽av | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 成人a免费看 | 日韩在线视频免费观看 | 片网址 | 日韩免费电影在线观看 | 在线婷婷 | 在线黄色国产电影 | 成人久久精品视频 | 亚洲一区二区高潮无套美女 | 在线看国产日韩 | 亚洲va欧美va| 99热 精品在线| 在线视频一区观看 | 亚洲开心色 | 99久久精品视频免费 | 欧美精品中文在线免费观看 | 中文字幕在线观看2018 | 久久婷婷一区二区三区 | 久久精品视频播放 | 在线观看91网站 | 国产精品精品久久久久久 | 中文字幕精品www乱入免费视频 | 久久久精品综合 | 99资源网| 国产精品一区二区三区在线 | 欧美国产日韩一区二区三区 | 欧美一级片免费观看 | www.超碰97.com| 国产精品免费久久久 | 国产精品理论视频 | 国产成人精品三级 | 亚洲精品久久久久久久不卡四虎 | 日韩理论电影在线 | 欧美日韩亚洲精品在线 | 国产精品成人av久久 | 欧美成人在线网站 | 欧美一区二区三区特黄 | 综合网欧美 | 久久久穴 | 成人久久久电影 | 国产在线999 | 在线成人免费av | 91成年人网站| 性色av一区二区三区在线观看 | a视频免费在线观看 | 日韩视频免费在线观看 | 亚洲美女在线国产 | 在线a视频免费观看 | 欧美激情综合五月 | 国产成人性色生活片 | 亚洲国产资源 | 色婷婷av一区 | 91网免费观看 | 日韩美视频 | 国产亚洲精品久久 | 成人av在线亚洲 | 欧美色图狠狠干 | 精品久久久久一区二区国产 | 九九在线精品视频 | 欧美精品在线观看免费 | 精品主播网红福利资源观看 | 成年人在线观看网站 | 国产精品成人一区二区 | 久久九九精品 | 日韩欧美一二三 | 亚洲一二三区精品 | 午夜久久久久久久久久影院 | 国产免费观看久久 | 青青啪| 欧美精品乱码久久久久久按摩 | 久久成人国产精品入口 | 999国内精品永久免费视频 | 色欧美88888久久久久久影院 | 九九在线免费视频 | 久久综合加勒比 | 亚洲精品天天 | www好男人 | 国产综合91| 91桃色免费视频 | 亚州av网站| 久久66热这里只有精品 | 国产亚洲精品久久19p | 久久精品99国产精品 | av在线电影免费观看 | 免费看三级网站 | 国产视频一区二区三区在线 | 西西4444www大胆艺术 | 4438全国亚洲精品观看视频 | 国产精品第一页在线观看 | 久久免费精品一区二区三区 | 又黄又爽的视频在线观看网站 | 精品伦理一区二区三区 | 日韩欧美在线综合网 | 欧洲色吧 | 国内精品久久久久 | 日韩精品中文字幕一区二区 | 久久亚洲欧美日韩精品专区 | 亚洲精品视频大全 | 99热超碰在线| 色综合天天色综合 | 国产成人av免费在线观看 | 伊人五月 | 婷婷国产精品 | 91成人看片 | 国产精品一区二区久久久久 | 国产一区二区在线影院 | 国产精品久久久久久一区二区三区 | 国产中文字幕在线免费观看 | 最新日韩在线观看视频 | 国产精品区一区 | 久久精品美女视频 | 色亚洲激情 | 日韩欧美在线视频一区二区 | 欧美 日韩 成人 | 伊人小视频 | 亚洲 在线 | 97成人在线 | 亚洲伦理一区 | 青青草久草在线 | 中文免费在线观看 | 麻豆国产精品va在线观看不卡 | 天天爱天天插 | 日韩午夜大片 | 久久高清毛片 | 在线v片免费观看视频 | 欧美最新大片在线看 | 人人玩人人添人人 | 国产欧美最新羞羞视频在线观看 | 国产精品手机在线 | 麻豆91精品91久久久 | 久久久久久久久久网 | 欧美日本中文字幕 | 亚洲成av人影片在线观看 | 国产又黄又爽无遮挡 | 国产女人40精品一区毛片视频 | 亚洲精品88欧美一区二区 | 97碰视频| 91av手机在线观看 | 日韩另类在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品久久久久久高潮 | 午夜国产在线观看 | 婷婷av电影| 成人一级视频在线观看 | 日韩一区二区三区高清在线观看 | 久久免费av电影 | 亚洲成年人av | 91精品视频网站 | 91九色视频在线播放 | 久久99国产精品久久 | 黄a网站 | 免费看黄色毛片 | 99久热在线精品 | 久亚洲精品| 玖玖视频免费在线 | 国产精品免费一区二区三区在线观看 | 99精品系列| 亚洲aⅴ久久精品 | 操操色 | 亚洲精选国产 | 久久精品久久久久电影 | 欧美久久久久久久久 | 国产第页 | 亚洲精品91天天久久人人 | 毛片激情永久免费 | 激情五月在线 | 国产精品免费麻豆入口 | 色人久久| 欧美色图另类 | 一级片在线 | 久久欧美视频 | 91精品国产综合久久婷婷香蕉 | 日韩av电影中文字幕 | 三级av免费| 中文av网 | 福利电影久久 | 蜜臀久久99静品久久久久久 | 欧美日韩在线观看一区二区 | 欧美精品999| 欧洲黄色片 | 人人草人人草 | 91片在线观看 | 在线只有精品 | 外国av网| 中文字幕观看视频 | 91视频最新网址 | 久久艹在线 | 久久久国产一区二区三区 | 国产日韩欧美在线一区 | 开心婷婷色 | 天堂av高清| 99热精品免费观看 | 日韩中文字幕免费在线播放 | 日韩av男人的天堂 | 92中文资源在线 | 国产一区国产精品 | 人人爽人人爽人人片 | 欧美日韩另类在线观看 | 久久精品欧美一区 | 亚洲综合精品在线 | 国产日韩视频在线 | 日韩高清一二三区 | 日本中文一级片 | 又长又大又黑又粗欧美 | 在线中文字幕av观看 | 日日摸日日爽 | 日韩av在线一区二区 | 午夜精品视频一区二区三区在线看 | 1024在线看片 | 一区二区三区四区五区在线 | 国产精品久久久777 成人手机在线视频 | 香蕉免费 | 亚洲区另类春色综合小说校园片 | 日韩黄色免费在线观看 | 中文在线www| 婷婷丁香av| 人人视频网站 | 亚洲精品网址在线观看 | 在线亚州| 丁香婷婷综合五月 | 久久新| avhd高清在线谜片 | 黄网站色成年免费观看 | 久久免费黄色网址 | 一级性视频 | 午夜av片| 狠狠色丁香久久婷婷综合丁香 | 97视频在线观看网址 | 国产高清精品在线 | 亚洲激情一区二区三区 | 国产一区二区中文字幕 | 女人18毛片a级毛片一区二区 | 亚洲精品视频免费 | 久久精品国产精品亚洲 | 中国一级片在线观看 | av怡红院 | 精品嫩模福利一区二区蜜臀 | 91精品视频免费看 | 99精品国产一区二区 | www久久久| 成年人免费av | 久草在线视频精品 | 午夜精品在线看 | 一本—道久久a久久精品蜜桃 | 超碰免费久久 | 手机av看片| 亚洲国产精品第一区二区 | 日本久草电影 | 黄色aa久久 | 欧美激情视频一二区 | 四虎国产永久在线精品 | 国产精品一区在线观看你懂的 | 亚洲综合欧美日韩狠狠色 | www黄| 成人av在线一区二区 | 在线亚洲播放 | 91视频最新网址 | 五月婷香蕉久色在线看 | 处女av在线 | 国产视频 久久久 | 亚洲精品在线免费看 | 99久精品视频 | 国产精品免费小视频 | 午夜久久久久久久 | 日韩av免费一区 | 天堂av免费观看 | 久久任你操 | 国产视频精品久久 | 亚洲精品影视 | 欧美一区二区三区在线视频观看 | 国产大陆亚洲精品国产 | 丁香5月婷婷 | 超碰av免费| 亚洲爱视频 | 丁香 久久 综合 | 亚洲日韩中文字幕 | 干天天 | 999精品视频| 九九九热视频 | 成人三级视频 | 亚洲美女视频网 | 91精品一区二区三区蜜臀 | 国产一区私人高清影院 | 天堂网av在线| 五月婷婷激情综合网 | 日韩中文字幕免费视频 | 五月花激情 | 欧美成人按摩 | 午夜视频色 | 亚洲国产精品久久 | 日本中文字幕在线 | 又黄又爽的免费高潮视频 | 97香蕉视频| 免费高清在线观看成人 | 91在线播放国产 | 欧美怡红院| 中文字幕在线资源 | 中文免费观看 | 美女在线免费观看视频 | 久久艹精品| 精品国产一区二区三区四区vr | 五月天综合网站 | 午夜 久久 tv | 五月婷综合 | 久久综合九色99 | 久久免费视频在线观看6 | 一级黄色电影网站 | 日韩在线高清 | 国产一区二区精品 | 午夜精品影院 | 91九色丨porny丨丰满6 | 国产一区二区视频在线 | 欧美性成人 | 亚洲aⅴ乱码精品成人区 | 天天综合网天天综合色 | 欧美精品久久久久久久久久 | 午夜精品一区二区三区在线播放 | 狠狠色婷婷丁香六月 | 97人人模人人爽人人喊中文字 | 国产精品久久久久久妇 | 国产高清一区二区 | 亚洲做受高潮欧美裸体 | 久久伊人婷婷 | 国产美女视频一区 | 成人午夜黄色影院 | 日韩av一卡二卡三卡 | 国产亚洲精品成人av久久影院 | 免费在线观看日韩视频 | 免费高清在线观看电视网站 | 在线视频一区观看 | 久久久久免费看 | 精品免费观看视频 | 久久视频在线观看 | 成人av地址| 激情五月色播五月 | 91精品一区二区三区蜜臀 | 黄色免费观看网址 | 最新高清无码专区 | 国产xx在线 | 99视频播放| 天天草天天干天天 | 中文字幕一区av | 久久99婷婷 | 超碰在线97观看 | 久久精品视频免费观看 | 国产高清绿奴videos | 国产伦精品一区二区三区照片91 | 亚洲一区二区精品在线 | 国产原厂视频在线观看 | 国产亚洲精品无 | 久精品视频在线观看 | 九九久久成人 | 99久久婷婷国产精品综合 | 国产在线视频一区 | 日本性xxxxx| 国产理论在线 | 亚洲国产精品成人va在线观看 | 一区中文字幕电影 | 四川妇女搡bbbb搡bbbb搡 | 亚洲观看黄色网 | 国产精品一区二区在线播放 | 国产一区在线看 | 天天操天天干天天操天天干 | 91视频啪| 婷婷婷国产在线视频 | 国产成人精品在线观看 | www.com久久久| 91av视频网 | 免费黄色一区 | av免费看av | www最近高清中文国语在线观看 | 欧美日韩啪啪 | 亚洲在线高清 | 国产手机在线视频 | 五月激情久久 | 国产精品欧美久久久久三级 | 亚洲色综合 | 国产精品久久久久久999 | 久久久久成人精品免费播放动漫 | 午夜123| 亚洲激情网站免费观看 | 国产一区二区精 | 99爱视频在线观看 | 四虎成人精品永久免费av | 久久免费电影网 | 国产精品久久久久一区 | 久久国语露脸国产精品电影 | 亚洲最大激情中文字幕 | 国产爽视频| 免费亚洲一区二区 | 国产美腿白丝袜足在线av | 亚洲黄色区 | 黄色在线观看免费网站 | 欧美日韩在线观看一区二区三区 | 久久久片 | 久久激情视频网 | 欧美污在线观看 | 91福利视频免费观看 | 丁香色婷婷 | 国产视频黄 | 丁香六月久久综合狠狠色 | 国产精品69av | 国产精品一区二区三区免费视频 | 99免费| 韩国av一区 | www.成人精品| 国产无套一区二区三区久久 | 日本在线观看黄色 | 久久精品高清 | 500部大龄熟乱视频 欧美日本三级 | 久久国产精品影视 | 天海冀一区二区三区 |