Presto JMX Connector


JMX连接器提供了从Presto集群中的所有节点查询JMX信息的能力,这对于监视或调试非常有用。Java管理扩展(JMX)提供有关Java虚拟机和在其中运行的所有软件的信息。Presto本身通过JMX进行了大量检测。

还可以配置此连接器,以便将选定的JMX信息定期转储并存储在内存中以供以后访问。

配置JMX连接器

要配置JMX连接器,请创建一个etc/catalog/jmx.properties包含以下内容的目录属性文件 :

connector.name=jmx

要启用定期转储,请定义以下属性:

connector.name=jmx
jmx.dump-tables=java.lang:type=Runtime,com.facebook.presto.execution.scheduler:name=NodeScheduler
jmx.dump-period=10s
jmx.max-entries=86400

dump-tables是托管Bean(Bean)的逗号分隔列表。它指定每个dump-period。历史记录max-entries的条目大小有限。双方dump-period 并max-entries有默认值10s和86400相应。

MBean名称中的逗号应按以下方式转义:

connector.name=jmx
jmx.dump-tables=com.facebook.presto.memory:type=memorypool\\,name=general,\
   com.facebook.presto.memory:type=memorypool\\,name=system,\
   com.facebook.presto.memory:type=memorypool\\,name=reserved

查询JMX

JMX连接器提供两种模式。

第一个是current包含来自Presto集群中每个节点的每个MBean。您可以通过运行以下命令查看所有可用的 MBean :SHOW TABLES

SHOW TABLES FROM jmx.current;

MBean名称映射到非标准表名称,并且在查询中引用它们时必须用双引号引起来。例如,以下查询显示每个节点的JVM版本:

SELECT node, vmname, vmversion
FROM jmx.current."java.lang:type=runtime";

                 node                 |              vmname               | vmversion
--------------------------------------+-----------------------------------+-----------
 ddc4df17-0b8e-4843-bb14-1b8af1a7451a | Java HotSpot(TM) 64-Bit Server VM | 24.60-b09
(1 row)

以下查询显示每个节点的打开和最大文件描述符计数:

SELECT openfiledescriptorcount, maxfiledescriptorcount
FROM jmx.current."java.lang:type=operatingsystem";

 openfiledescriptorcount | maxfiledescriptorcount
-------------------------+------------------------
                     329 |                  10240
(1 row)

配符*可以与current模式中的表名一起使用。这允许在单个查询中匹配多个 MBean 对象。以下查询返回来自每个节点上不同Presto内存池的信息:

SELECT freebytes, node, object_name
FROM jmx.current."com.facebook.presto.memory:*type=memorypool*";

 freebytes  |  node   |                       object_name
------------+---------+----------------------------------------------------------
  214748364 | example | com.facebook.presto.memory:type=MemoryPool,name=reserved
 1073741825 | example | com.facebook.presto.memory:type=MemoryPool,name=general
  858993459 | example | com.facebook.presto.memory:type=MemoryPool,name=system
(3 rows)

该history架构包含在连接器属性文件中配置的表列表。这些表的列与当前模式中的列相同,但有一个额外的时间戳列,用于存储拍摄快照的时间:

SELECT "timestamp", "uptime" FROM jmx.history."java.lang:type=runtime";

        timestamp        | uptime
-------------------------+--------
 2016-01-28 10:18:50.000 |  11420
 2016-01-28 10:19:00.000 |  21422
 2016-01-28 10:19:10.000 |  31412
(3 rows)