it里本没有坑,一不小心掉进去了,坑就出来了。这次是由于自已的不懂,才掉进去了。
在测试环境和线上一样的配置,却出现有的数据采集不到情况,请看下图
我采用的架构方式是:zabbix3.0+java_gateway_jmx。开始填坑debug之旅行。
1.最开始以为是配置的key出错,一一核对,两个环境的配置都一样的。排除
2.debug zabbix的所有信息,extended debugging (produces even more information),没有收获。排除
3.debug java_gate的log,没收获。排除
4.debug 服务器的jmx,还是没收攻。
5.下了cmdline-jmx....jar,进行debug,下载的地址是:
http://dldx.csdn.net/fd.php?i=996982995519160&s=6b88543944aebc3b8a18d3b92109edac
用法是:Usage: java -jar cmdline-jmxclient.jar USER:PASS HOST:PORT [BEAN] [COMMAND]
cmdline-jmx这种方也没提供多少有用的信息,返回信息如下
Usage: Usage (type=javax.management.openmbean.CompositeData)
PeakUsage: PeakUsage (type=javax.management.openmbean.CompositeData)
MemoryManagerNames: MemoryManagerNames (type=[Ljava.lang.String;)
UsageThreshold: UsageThreshold (type=long)
UsageThresholdExceeded: UsageThresholdExceeded (type=boolean)
UsageThresholdCount: UsageThresholdCount (type=long)
UsageThresholdSupported: UsageThresholdSupported (type=boolean)
CollectionUsageThreshold: CollectionUsageThreshold (type=long)
CollectionUsageThresholdExceeded: CollectionUsageThresholdExceeded (type=boolean)
CollectionUsageThresholdCount: CollectionUsageThresholdCount (type=long)
CollectionUsage: CollectionUsage (type=javax.management.openmbean.CompositeData)
CollectionUsageThresholdSupported: CollectionUsageThresholdSupported (type=boolean)
Valid: Valid (type=boolean)
Name: Name (type=java.lang.String)
Type: Type (type=java.lang.String)
ObjectName: ObjectName (type=javax.management.ObjectName)
Operations:
resetPeakUsage: resetPeakUsage
Parameters 0, return type=void
做到这里之后,发现在哪里都正确,因为没找到错误,也许潜得太深了。
6.开始怀疑javae的工作的进程数是否开得过少,默认是5,于是把这两个参数
StartPollers=40
StartJavaPollers=40
重启----没效果
7.整个流程下来,都没有发现明显的异常。最讨厌的就是这些情况
部分错误
没有明显异常,error
google一圈没发现好的建议。
于是低头思看图...........举头望窗外.............
8.最后采取对这两个环境参数的更进一步比对。由于某些原因,就不贴出来了。成功往往来自于细节。经过各种测试排除之后,终于发现启动的时候,gc的机制不一样,测试用的是UseParallelOldGC
线上用的是CMSScavengeBeforeRemark
发现这两个不同,于是改变key写法,果真,有关gc的值采集到,然后联想到old gen的值也采集到了。
突然想明白了,采用gc机制的不同,key的参数不一样,也会影响到对jvm中新生代,持久代,老年代信息采集。
多么伤痛的领悟。
UseParallelOldGC的写法
java.lang:type=GarbageCollector,name= ParNew","CollectionCount"
CMSScavengeBeforeRemark的写法
java.lang:type=GarbageCollector,name=ConcurrentMarkSweep","CollectionCount“
总结:
为什么会踩到坑。
对jvm整个流程一知半解,gc机制不深入
对key的写法,不熟悉,这方面在google搜一圈和jdk官网上,没发现很全很详细的jmx_api
忽略某些细节
最后来一张大图,虽还没做完,不过问题已经定位出来了
相关推荐
代理Java包,用于生成JVM的健康的数据,jmx_prometheus_javaagent-0.12.0.jar
https://pan.baidu.com/s/15TPev6CpXCRIPvXCIreMzA sbnh
jmx的简单实例,有7 8个,都是简单的
很多jmx教程中提到的几个zip jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip
jmx_tomcat_jboss
JMX_in_Action的源码,非常难得! 对这本书感兴趣的可以下载!
java -javaagent:./jmx_prometheus_javaagent-0.15.0.jar=8080:config.yaml -jar yourJar.jar 现在可以在访问 要将Java代理绑定到特定IP,请将端口号更改为host:port 。 请参阅./run_sample_httpserver.sh ,以...
JMX_1_3_specification,对比刚接触jmx或着想深入了解jmx的童鞋们有帮助
这个是一个关于Java5。0的一个源代码,是一个很实用的资料。
下载jmx_remote-1_0_1_03-ri.zip文件,里面包括:doc,examples,lib。其中lib里面包括:jmxremote.jar,jmxremote_optional.jar和rmissl.jar。这是我从oracle官网上下载的,它本身就是免费的,所以在这里提供给大家...
这是jmx_in_action一书的随书源码,里面可能有些代码段是现在不支持了,练习的时候请注意,欢迎交流Q群10578307
JMX in Action JMX in Action
下载jmx_remote-1_0_1_03-ri.zip文件,里面包括:doc,examples,lib。其中lib里面包括:jmxremote.jar,jmxremote_optional.jar和rmissl.jar。这是我从oracle官网上下载的,它本身就是免费的,所以在这里提供给大家...
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。文件里面包含jmx开发5个常见的jar包,其中还有些example。
javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 ...
光宇java的JMX远程服务器管理监控系统的帮助文件,说明了JMX在javaweb中的一些应用及应用方法。
此资源是用于开发人员或者测试人员在使用java mission control时,需要放置在Tomcat中的文件
NULL 博文链接:https://tristan-s.iteye.com/blog/1997741
sun提供的jmx框架实现,学习jmx时总是找不到需要的jar包,很是痛苦