点击上方“民工哥技术之路”选择“星标”

每天10点为你分享不一样的干货

 读者福利!多达 2048G 各种资源免费赠送

1.前言:


我们的监控系统是zabbix,最近刚做完jvm还有tomcat的监控,需要吐槽以下内容:

  • zabbix官方提供的jvm和tomcat监控模版,存在item书写格式的坑,导致很多内容无法获取到监控。

  • 网友写的zabbix监控java文章,99%就只有环境的搭建,没有zabbix item键值,所以环境监控上了,item键值不知道怎么写。

本文监控jvm内容如下:

内存使用状态:堆内存(Heap memory)和非堆内存(No Heap memory),包括已用值、最大值、已提交;
堆内存内存池:新生代(eden space),survivor space,老年代(old gen)的内存使用状态;
非堆内存内存池:代码缓存(Code cache),元空间(meta space),压缩类空间(compressed class space);
类加载:加载总数,已加载,已卸载。
Java线程:总开启线程,活动线程,线程峰值。

本文监控tomcat内容如下:

Tomcat请求数:包括每秒请求数,每秒出错数;
Tomcat网络流量统计:包括进流量统计,出流量统计;
Tomcat线程:包括最大线程数,当前线程数,当前繁忙线程数。

我没有在zabbix中添加垃圾回收(gc)的监控,而是在catalina配置里面添加gc日输入来给开发进行分析,设置方式如下。

CATALINA_OPTS=”-XX:ParallelGCThreads=4 -XX:+PrintGCDetails -Xloggc:日志存放路径”

监控效果如下:


2.监控环境搭建


环境介绍:

[root@tomcat-01 ~]# /usr/local/tomcat/bin/version.shServer version: Apache Tomcat/8.0.23Server built: May 19 2015 14:58:38 UTCServer number: 8.0.23.0OS Name: LinuxOS Version: 2.6.32-573.22.1.el6.x86_64Architecture: amd64JVM Version: 1.8.0_65-b17JVM Vendor: Oracle Corporation

2.1.Server端配置

1、 Zabbix server端安装java jdk环境并开启javaGateway支持java监控。

javaGateway 启用方式如下:

Zabbix通过rpm包安装:只需要安装zabbix-java-gateway包即可。

Zabbix通过编译安装:在编译时需要加上—enable-java以支持jmx监控,如果之前没加需要重新编译。

2、修改zabbix-java-gateway配置文件

[root@zabbix ~]# vim /etc/zabbix/zabbix_java_gateway.confLISTEN_IP="192.168.10.3"LISTEN_PORT=10052PID_FILE="/var/run/zabbix/zabbix_java.pid"START_POLLERS=5

修改zabbix-server配置文件[root@zabbix ~]# vim /etc/zabbix/zabbix_server.confJavaGateway=192.168.10.3JavaGatewayPort=10052StartJavaPollers=5

启动zabbix-java-gateway服务[root@zabbix ~]# /etc/init.d/zabbix-java-gateway start

2.2.Tomcat服务器配置

1、下载catalina-jmx-remote.jar包,到tomcat安装目录下的lib目录

wget -O /usr/local/tomcat/lib/catalina-jmx-remote.jar http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/extras/catalina-jmx-remote.jar

2、修改catalina.sh添加如下内容

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

3、重启tomcat与监控测试

(1)下载cmdline-jmxclient-0.10.3.jar文件,下载地址http://crawler.archive.org/cmdline-jmxclient/downloads.html
(2)本地执行如下命令查看tomcat的堆内存信息

[root@tomcat-01 ~]# java -jar /root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=Memory HeapMemoryUsage11/04/2016 15:23:16 +0800 org.archive.jmx.Client HeapMemoryUsage:committed: 2146959360init: 2147483648max: 2146959360used: 407611808


3.监控数据采集

3.1.堆内存

Tomcat本地查看堆内存信息:

[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Memory HeapMemoryUsage11/04/2016 15:36:58 +0800 org.archive.jmx.Client HeapMemoryUsage:committed: 2145910784init: 2147483648max: 2145910784used: 741540536

zabbix监控堆内存键值:

堆内存最大值:jmx["java.lang:type=Memory","HeapMemoryUsage.max"]已用堆内存:jmx["java.lang:type=Memory","HeapMemoryUsage.used"]已提交堆内存:jmx["java.lang:type=Memory","HeapMemoryUsage.committed"]

一个完整的zabbix item填写方式如下,不同内容填写不同的键值即可:

3.2.内存池eden space:

Tomcat本地查看eden space:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=PS\ Eden\ Space Usage

zabbix监控eden区域键值:

最大空间:jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.max]已用空间:jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.used]提交空间:jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.committed]

3.3.内存池survivor space:

Tomcat本地查看Survivor space区域:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=PS\ Survivor\ Space Usage

zabbix监控Survivor 键值:

jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.committed]jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.max]jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.used]

3.4.内存池old gen:

Tomcat本地查看old gen区域使用:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:name=PS\ Old\ Gen,type=MemoryPool Usage

zabbix监控old gen键值:

jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.committed]jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.max]jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.used]

3.5.非堆内存:

Tomcat 本地查看非堆内存使用:

java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Memory NonHeapMemoryUsag1zabbix监控非堆内存使用1jmx["java.lang:type=Memory","NonHeapMemoryUsag.committed"]jmx["java.lang:type=Memory","NonHeapMemoryUsag.used"]

3.6.内存池meta space:

Tomcat 本地查看meta space区域使用:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Metaspace Usage

zabbix监控mete space区域键值

jmx["java.lang:type=MemoryPool,name=Metaspace",Usage.committed]jmx["java.lang:type=MemoryPool,name=Metaspace",Usage.used]

3.7.内存池code cache:

Tomcat 本地查看code cache区域使用:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Code\ Cache Usage

zabbix监控code cache区域使用:

jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.committed]jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.max]jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.used]

3.8.内存池compressed class space:

Tomcat 本地查看compressed class space区域使用:

java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Compressed\ Class\ Space Usage

zabbix监控 compressed class space区域使用键值:

jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.committed]jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.max]jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.used]

3.9.类加载:

Tomcat本地查看类加载信息:

加载总数: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading TotalLoadedClassCoun已加载: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading LoadedClassCount已卸载: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading UnloadedClassCount

Zabbix监控类加载键值:

加载总数: jmx["java.lang:type=ClassLoading","TotalLoadedClassCount"]已加载: jmx["java.lang:type=ClassLoading","LoadedClassCount"]已卸载: jmx["java.lang:type=ClassLoading","UnloadedClassCount"]

3.10.java线程:

tomcat本地查看java线程:

总开启线程: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading TotalStartedThreadCount活动线程: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading PeakThreadCount线程峰值: java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading PeakThreadCount

Zabbix监控java线程键值:

总开启线程: jmx["java.lang:type=Threading","TotalStartedThreadCount"]活动线程: jmx["java.lang:type=Threading","ThreadCount"]线程峰值: jmx["java.lang:type=Threading","PeakThreadCount"]

3.11.tomcat线程:

本地查看tomcat线程信息:

最大线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool maxThreads当前线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool currentThreadCount繁忙线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool currentThreadsBusy

Zabbix监控tomcat线程键值:

最大线程:jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",maxThreads]当前线程:jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",currentThreadCount]繁忙线程 jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",currentThreadsBusy]

3.12.网络流量:

Tomcat本地查看接收的字节:

接收的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor bytesReceived发送的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor bytesSent

Zabbix监控tomcat接受字节键值:

接收的字节:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",bytesReceived]发送的字节:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",bytesSent]

3.13.tomcat请求,出错请求:

tomcat本地查看tomcat请求数:

tomcat请求数: java -jar cmdline-jmxclient-0.10.3.jar - 192.168.10.46:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor requestCounttomcat出错请求: java -jar cmdline-jmxclient-0.10.3.jar - 192.168.10.46:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor errorCount

zabbix监控tomcat请求数:

tomcat请求数: jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",requestCount]tomcat出错请求:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",errorCount]


4.问题的解答


最近有网友联系我说,看着我的博文搭建完了环境,获取不到数据,我帮助排查了一下,找到了问题所在,特此记录。

网友的报错如下:

# java -jar /root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:type=MemoryPool,name=PS\ Eden\ Space Usag11/11/2016 10:03:37 +0800org.archive.jmx.Client java.lang:name=PS Eden Space,type=MemoryPool is not a registered bean

4.1.解决思路

  • 如果你使用命令行监控获取不到数据,那么就先使用jconsole看看有没有数据,

  • 如果jconsole有数据,那么就往下看,反之检查你的环境。

  • 如果jconsole有数据,但是命令行没有数据,那么就是Mbean的Object Name或者属性有问题,网友都是复制我的,但是自己本地环境和我的环境不一样所以导致获取不到数据,查询自己的本地Mbean方法有两种,分别是图形和命令行,网友的报错说事自己的Eden Space空间有问题,那么我就贴出来查看本地内存池的Object Name和属性的方法。

(1)通过jconsole查看:

(2)通过命令行查看:直接使用java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:8090命令可以获取所有的Mbean信息,输出太多这里就不贴输出结果了。我通过grep命令获取所有内存池的监控信息方式如下。

[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 | grep MemoryPooljava.lang:name=Compressed Class Space,type=MemoryPooljava.lang:name=Metaspace,type=MemoryPooljava.lang:name=PS Old Gen,type=MemoryPooljava.lang:name=PS Eden Space,type=MemoryPooljava.lang:name=PS Survivor Space,type=MemoryPooljava.lang:name=Code Cache,type=MemoryPool

然后我要获取Eden Space的所有属性信息方式如下:(一些特殊字符需要转义)

[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:name=PS\ Eden\ Space,type=MemoryPoolAttributes: 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

那么我们在查看Eden Space空间的使用信息。就看到已经出来数据了

[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:name=PS\ Eden\ Space,type=MemoryPool Usage12/03/2016 08:33:58 +0800 org.archive.jmx.Client Usage:committed: 712507392init: 537395200max: 712507392used: 396006304

文章系作者原创投稿,作者:西门飞冰,一名90后it男,一直在北京工作,热爱运动,热爱冒险,热爱旅行。 原文:西门飞冰的博客-专注于Linux运维 » zabbix监控tomcat(包含jvm监控)。

在 民工哥技术之路 微信公众号对话框回复关键字:1024 可以获取一份最新整理的技术干货。

怎么选?毕竟可以上网的浏览器只剩下四款了...

想要高可用?搞定负载均衡架构是关键

一键实现自动化部署(灰度发布)实践

创业公司技术总监,去上市公司面试,结果凉了!

华为方舟编译器开源官网正式上线

8年了,再见!Python 2

整理了一些 IDEA 中比较骚的技巧,发现第一个就没用过!

点击【阅读原文】和民工哥一起学技术、搞事情~~

不管怎样

点“在看”一定不能放弃啊

使用 zabbix 监控 tomcat(包含jvm监控)相关推荐

  1. tomcat 8集合memcache所需完整jar包_使用 zabbix 监控 tomcat(包含jvm监控)

    点击上方"民工哥技术之路"选择"星标" 每天10点为你分享不一样的干货  读者福利!多达 2048G 各种资源免费赠送 1.前言: 我们的监控系统是zabbix ...

  2. 通过JCONSOLE监控TOMCAT的JVM使用情况

    这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL": http://blog.163.com/kangle0925@126/blog/static/2775819820115 ...

  3. JVM监控:JVM监控指标、JVM监控界面实现、Java监控JVM

    本文概要: 1.监控JVM的哪些指标: 2.一目了然的JVM监控的UI界面: 3.Java代码获取JVM监控状态. 1.监控JVM的哪些指标 javaVersion                   ...

  4. 性能监控/优化系列——JVM监控/调优

    JVM监控 1. ParNew表示CMS收集器在新生代采用多线程进行垃圾回收.DefNew表示顺序垃圾收集器在新生代采用单线程进行垃圾回收. 2.系统做完CMS cycle后,观察minorGC的日志 ...

  5. JVM监控篇(三)- JVM监控方案之prometheus+k8s+influxdb

    1- 方案说明 适用场景:Java程序直接运行在Linux机器上 组件说明: 1)k8s集群,使用NodePort方式暴露48888端口用于JVM监控 2)JMX sidecar容器用于将jmx的相关 ...

  6. Jconsole远程监控tomcat 的JVM内存(linux、windows)

    Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界 ...

  7. 监控Tomcat解决方案(监控应用服务器系列文章分享)

    使用JMX接口开发监控程序   ◆ 全部代码需要从零开始,代码量较大   ◆ 支持各不同版本比较麻烦,每个版本可能有差异   ◆ 可支配性强   ◆ 最重要的一个缺点是,配置比较麻烦 Tomcat激活 ...

  8. Tomcat线程池监控及线程池原理分析

      目录         一.背景         二.tomcat线程池监控         三.tomcat线程池原理         四.总结 一.背景 我们都知道稳定性.高可用对于一个系统来讲 ...

  9. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控

    文章目录 1. 快速开始 2. 监控和管理端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本的HTTP跟踪 ...

最新文章

  1. jsp中设置自动换行_微信公众号文章中如何设置自动回复?
  2. windows 安装 reviewboard
  3. GDCM:gdcm::IconImageFilter的测试程序
  4. c语言分治法求数组最大值,使用分治法求最大子数组的下标。
  5. python中时间处理去空格去冒号_Python实用日期时间处理方法汇总
  6. java数组转list(Arrays .asList)
  7. out参数不用赋值?这么神奇吗!
  8. javadoc maven_Maven Fluido Skin和Javadoc类图
  9. STM32F103输出互补PWM波
  10. 咬了一口苹果死去的计算机之父——图灵
  11. 网络空间安全态势感知技术
  12. 最新百度开放云平台应用引擎BAE空间使用教程
  13. win10检测不到第二个显示器怎么解决 win10外接显示器黑屏怎么办
  14. 使用Unity实现时光倒流
  15. 网络宽带和实际下载速度单位换算详解:
  16. Windows快捷键大全(2020年版)
  17. python学生成绩管理系统【完整版】
  18. 董老师又双叒叕送书啦,8本《Python数据分析、挖掘与可视化(慕课版)》
  19. OpenCV4教程——4.1 窗口相关操作
  20. Exercise 35: 分支和函数

热门文章

  1. MT8665芯片处理器,MT8665模块方案开发
  2. utf8ascii编码
  3. ARM裸机——2.ARM体系结构(1)
  4. 光耦w314的各引脚图_光电耦合器的管脚图及工作原理
  5. Android-Notes|BottomNavigationView-爱上-Lottie,android高级开发面试题
  6. 程序员的神逻辑,不扶墙就服你!
  7. openssh8.6默认不支持公钥ssh(gogs无法使用)
  8. 图形 1.4 PC手机图形API介绍
  9. 4个查询网站收录的方式,你中意哪个查询方式呢?
  10. 路缘石滑模机对于公路施工的适用性分析