前提条件:已安装好java环境,tomcat,influxdb和collectd。本文暂不提供以上内容的安装步骤

系统环境:centos7

原理:开启tomcat的jmx端口,使用collectd的collectd-fast-jmx插件收集jmx信息,collectd把数据存储到infludb,再由grafana展示infludb的数据

1,开启tomcat的jmx配置

cd /usr/local/tomcat/bin/

cp catalina.sh catalina.sh.bak

vim catalina.sh

增加:CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=utf-8 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1"

重启tomcat

/etc/init.d/tomcat restart

netstat -nltp

看到9999端口开启就表示jmx开启成功了

2,下载collectd-fast-jmx插件

http://www.mvnjar.com/com.e-gineering/collectd-fast-jmx/1.0.0/detail.html下载插件拷贝到机器上并重命名为collectd-fast-jmx.jar

cd /tmp

wget http://maven.aliyun.com/nexus/content/groups/public/com/e-gineering/collectd-fast-jmx/1.0.0/collectd-fast-jmx-1.0.0.jar

cd /opt/collectd/share/collectd/java/

mv /tmp/collectd-fast-jmx-1.0.0.jar collectd-fast-jmx.jar

3,编辑collectd配置文件并启动collectd

collectd插件的安装比较简单,下载jar包,在配置文件中添加相关配置就可以了。collectd有丰富的插件可以使用,免去了自己写监控脚本的繁琐。

cd /opt/collectd/etc

cp collectd.conf collectd.conf.bak

vim collectd.conf

增加如下内容:

  1. LoadPlugin java
  2. <Plugin "java">
  3.  
  4. LoadPlugin "com.e_gineering.collectd.FastJMX"
  5.  
  6. <Plugin "FastJMX">
  7. MaxThreads 256
  8. CollectInternal true
  9.  
  10. <MBean "classes">
  11. ObjectName "java.lang:type=ClassLoading"
  12.  
  13. <Value "LoadedClassCount">
  14. Type "gauge"
  15. InstancePrefix "loaded_classes"
  16. PluginName "JVM"
  17. </Value>
  18. </MBean>
  19.  
  20. # Time spent by the JVM compiling or optimizing.
  21. <MBean "compilation">
  22. ObjectName "java.lang:type=Compilation"
  23.  
  24. <Value "TotalCompilationTime">
  25. Type "total_time_in_ms"
  26. InstancePrefix "compilation_time"
  27. PluginName "JVM"
  28. </Value>
  29. </MBean>
  30.  
  31. # Garbage collector information
  32. <MBean "garbage_collector">
  33. ObjectName "java.lang:type=GarbageCollector,*"
  34. InstancePrefix "gc-"
  35. InstanceFrom "name"
  36.  
  37. <Value "CollectionTime">
  38. Type "total_time_in_ms"
  39. InstancePrefix "collection_time"
  40. PluginName "JVM"
  41. </Value>
  42. </MBean>
  43.  
  44. <MBean "memory_pool">
  45. ObjectName "java.lang:type=MemoryPool,*"
  46. InstancePrefix "memory_pool-"
  47. InstanceFrom "name"
  48. <Value>
  49. Type "memory"
  50. Table true
  51. Attribute "Usage"
  52. </Value>
  53. </MBean>
  54. <MBean "memory-heap">
  55. ObjectName "java.lang:type=Memory"
  56. InstancePrefix "memory-heap"
  57. <Value>
  58. Type "memory"
  59. Table true
  60. Attribute "HeapMemoryUsage"
  61. </Value>
  62. </MBean>
  63. <MBean "memory-nonheap">
  64. ObjectName "java.lang:type=Memory"
  65. InstancePrefix "memory-nonheap"
  66. <Value>
  67. Type "memory"
  68. Table true
  69. Attribute "NonHeapMemoryUsage"
  70. </Value>
  71. </MBean>
  72. <MBean "thread">
  73. ObjectName "java.lang:type=Threading"
  74. InstancePrefix "threading"
  75. <Value>
  76. Type "gauge"
  77. Table false
  78. Attribute "ThreadCount"
  79. InstancePrefix "count"
  80. </Value>
  81. </MBean>
  82. <MBean "thread-daemon">
  83. ObjectName "java.lang:type=Threading"
  84. InstancePrefix "threading"
  85. <Value>
  86. Type "gauge"
  87. Table false
  88. Attribute "DaemonThreadCount"
  89. InstancePrefix "count-daemon"
  90. </Value>
  91. </MBean>
  92. ### MBeans by Catalina / Tomcat ###
  93. # The global request processor (summary for each request processor)
  94. <MBean "catalina/global_request_processor">
  95. ObjectName "Catalina:type=GlobalRequestProcessor,*"
  96. InstancePrefix "catalina_request_processor-"
  97. InstanceFrom "name"
  98.  
  99. <Value>
  100. Type "io_octets"
  101. InstancePrefix "global"
  102. #InstanceFrom ""
  103. Table false
  104. Attribute "bytesReceived"
  105. Attribute "bytesSent"
  106. </Value>
  107.  
  108. <Value>
  109. Type "total_requests"
  110. InstancePrefix "global"
  111. #InstanceFrom ""
  112. Table false
  113. Attribute "requestCount"
  114. </Value>
  115.  
  116. <Value>
  117. Type "total_time_in_ms"
  118. InstancePrefix "global-processing"
  119. #InstanceFrom ""
  120. Table false
  121. Attribute "processingTime"
  122. </Value>
  123. </MBean>
  124.  
  125. <MBean "catalina/threadpool">
  126. ObjectName "Catalina:type=ThreadPool,*"
  127. InstancePrefix "catalina_threadpool-"
  128. InstanceFrom "name"
  129.  
  130. <Value>
  131. Type "gauge"
  132. Table false
  133. Attribute "maxThreads"
  134. InstancePrefix "threadpool-maxThreads"
  135. </Value>
  136. <Value>
  137. Type "gauge"
  138. Table false
  139. Attribute "connectionCount"
  140. InstancePrefix "threadpool-connectionCount"
  141. </Value>
  142. </MBean>
  143.  
  144. <MBean "tomcat_manager">
  145. ObjectName "Catalina:type=Manager,context=*,host=*"
  146. InstanceFrom "context"
  147. <Value>
  148. Type "gauge"
  149. InstancePrefix "manager-active_sessions"
  150. Table false
  151. Attribute "activeSessions"
  152. </Value>
  153. </MBean>
  154.  
  155. <MBean "jvm_runtime">
  156. ObjectName "java.lang:type=Runtime"
  157. <Value>
  158. Type "counter"
  159. InstancePrefix "runtime-uptime"
  160. Table false
  161. Attribute "Uptime"
  162. </Value>
  163. </MBean>
  164.  
  165. <MBean "jvm_system">
  166. ObjectName "java.lang:type=OperatingSystem"
  167. <Value>
  168. Type "gauge"
  169. InstancePrefix "os-open_fd_count"
  170. Table false
  171. Attribute "OpenFileDescriptorCount"
  172. </Value>
  173. <Value>
  174. Type "counter"
  175. InstancePrefix "os-process_cpu_time"
  176. Table false
  177. Attribute "ProcessCpuTime"
  178. </Value>
  179. </MBean>
  180. <Connection>
  181. ServiceURL "service:jmx:rmi:///jndi/rmi://testserver:9999/jmxrmi"
  182. Host "testserver"
  183. IncludePortInHostname true
  184. Collect "classes"
  185. Collect "thread"
  186. Collect "thread-daemon"
  187. Collect "compilation"
  188. Collect "garbage_collector"
  189. Collect "memory_pool"
  190. Collect "memory-heap"
  191. Collect "memory-nonheap"
  192. Collect "catalina/global_request_processor"
  193. Collect "catalina/threadpool"
  194. Collect "jvm_system"
  195. Collect "jvm_runtime"
  196. Collect "tomcat_manager"
  197. </Connection>
  198. </Plugin>
  199. </Plugin>

  

校验配置文件  /opt/collectd/sbin/collectd -t编辑完成后保存退出

没问题的话就重启collectd

ps -ef |grep collectd

kill -9 6669(这里是进程号)

/opt/collectd/sbin/collectd

4,配置grafana,使用的是网上的模板

grafana面板下载地址:

https://grafana.com/dashboards/1503

可以看出面板的编号是1503

接下来配置下grafana就可以了

(1)在主页选择”dashboards"->"improt"进行模板导入

(2)输入模板编号1503,再点击load

(3)输入面板名字,选择数据源,点击import

(4)然后就可以在grafana上看到tomcat的JVM监控了,大功告成!

collectd+infludb+grafana实现tomcat JVM监控的更多相关文章

  1. collectd+influxDB+Grafana搭建性能监控平台

    网上查看了很多关于环境搭建的文章,都比较久远了很多安装包源都不可用了,今天收集了很多资料组合尝试使用新版本来搭建,故在此记录. 采集数据(collectd)-> 存储数据(influxdb) - ...

  2. Collectd+InfluxDB+Grafana监控系统搭建

    环境配置 节点 配置 类型 操作系统 Sched 2G 2CPU 50GB ens3=>192.168.200.11 KVM虚拟机 CentOS 7 Nova 4G 2CPU 50GB ens3 ...

  3. 09 . Prometheus监控tomcat+jvm

    List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz redis_exporter-v0.30.0.linux-amd64.tar.gz 节点名 IP ...

  4. jvm 监控

    jvm监控可视化的有 jconsole .jmc .jvisualvm 其中jvisualvm开启一些监控会导致他自己关闭. 并且jdk下有很多工具可以进行jvm监控, jmap -histo:liv ...

  5. zabbix实现对tomcat的监控

    zabbix实现对tomcat的监控 工作原理 比如:当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix- ...

  6. Tomcat性能监控之Probe

    目前采用java进行开发的系统居多,这些系统运行在java容器中,通过对容器的监控可以了解到java进程的运行状况,分析java程序问题.目前市面上流行的中间件有很多(Tomcat.jetty.jbo ...

  7. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...

  8. JAVA 容器配置 JVM 监控

    目前世面上较流行的JAVA容器工具有:tomcat,jboss,weblogic 在日常工作中,经常会遇到开发需要查看JVM相关信息,这时就需要开启JVM. 一.tomcat 1 修改jdk认证配置文 ...

  9. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

随机推荐

  1. 理解 ASP.NET Core: 处理管道

    理解 ASP.NET Core 处理管道 在 ASP.NET Core 的管道处理部分,实现思想已经不是传统的面向对象模式,而是切换到了函数式编程模式.这导致代码的逻辑大大简化,但是,对于熟悉面向对象 ...

  2. mysql 5.7添加server_audit 安全审计功能

    mysql 5.7添加server_audit 安全审计功能 一.根据链接下载插件 参考链接下载  http://blog.itpub.net/31441024/viewspace-2213103 l ...

  3. 微信小程序生成二维码并且扫码跳转并且携带参数

    话不多说,直接上代码,直接把APPID和APPSECRET改成自己的就能用了 <?php header('content-type:text/html;charset=utf-8'); //配置 ...

  4. .net core quartz job作业调度管理组件

    定时作业对于多数系统来说,都会用到,定时作业的实现方式可以有多种方式,简单的方式用Timer就可以实现,但是达不到通用的效果,本文采用Quartz基础组件来搭建一套企业通用的作业调度管理服务,希望对于 ...

  5. IDM中的选项设置你了解多少?

    IDM(Internet Download Manager)下载器能够兼容支持多种浏览器进行文件下载,很多时候只要复制一个地址IDM的下载弹窗就自动弹出来,有时候不需要下载的时候也会弹,时间久了就会感 ...

  6. rocketmq的吞吐量为什么小于kafka

    转载: https://www.jianshu.com/p/c474ca9f9430

  7. 以注解的方式实现api和provider

    1.provider import com.alibaba.dubbo.config.annotation.Service; import facade.EchoService; import com ...

  8. pyhon的6大基本数据类型

    1.数字型(Number) 1.1 整型(int) 整型包括所有的正整数,负整数还有0. 在python中所有的整型数据全部默认采用十进制进行表示,但我们还可以手动表示其他进制的整型,具体表示如下: ...

  9. java45

    Collection c2 = new ArrayList(); c2.add("a"); c2.add("b"); //移除集合中的某个元素 c2.remov ...

  10. Python之【模块】

    双层装饰器 一个函数可以被多个装饰器装饰: 多层装饰器的本质是:嵌套: 执行规则是:解释自下而上,执行自上而下 •简单的用户权限验证程序: USE_INFO = {} # 初始化一个字典,用户存放用户 ...