項目後端架構使用 Tomcat 做爲 Web 服務的容器,在系統設計之初,考慮到大量併發的狀況,將後端拆分紅若干個模塊,分別經過部署在集羣中的 Tomcat 加載,這些 Tomcat 可否正常工做而且在業務高峯承受住大量的請求,成爲了關鍵。java
一開始搭建監控體系時,僅僅監控了集羣中每臺服務器系統的各項指標,也就是隻添加了 Template OS Linux 模板,對 Tomcat 進程的狀態很難把控。mysql
JMX在Java編程語言中定義了應用程序以及網絡管理和監控的體系結構、設計模式、應用程序接口以及服務。一般使用JMX來監控系統的運行狀態或管理系統的某些方面,好比清空緩存、從新加載配置文件等git
優勢能夠很是容易的使應用程序具備被管理github
伸縮性的架構每一個JMX Agent服務能夠很容易的放入到Agent中,每一個JMX的實現都提供幾個核心的Agent服務,你也能夠本身編寫服務,服務能夠很容易的部署,取消部署。sql
主要提供接口,容許有不一樣的實現apache
---------- 摘自《百度百科》編程
zabbix 監控 tomcat,實際上也是經過 Java 本身的 JMX 來獲取數據的,tomcat 須要配置 JMX。後端
官網下載 java jdk 到服務器,配置 /etc/peofile設計模式
JAVA_HOME=/usr/java/jdk1.7.0 JRE_HOME=/usr/java/jdk1.7.0/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
官網下載 tomcat數組
配置 tomcat JMX,編輯 ./bin/catalina.sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote=ture -Djavax.management.builder.initial= -Djava.rmi.server.hostname=10.12.41.127 #tomcat IP -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false " # ----- Execute The Requested Command 在這行上面添加
詳細安裝參考:
傳送門:https://my.oschina.net/u/2470065/blog/716047
編譯安裝 zabbix 時須要添加其對 Java 支持(--enable-java):
./configure --prefix=/usr/local/zabbix-3.0.3 --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
zabbix_server 開啓 java poller,zabbix_java 開啓 JavaGateway,端口爲 10052,tomcat JMX 開啓 12345 提供性能數據;
修改 JavaGateway 的配置文件,$zabbix_server_home/sbin/zabbix_java/settings.sh:
LISTEN_IP="0.0.0.0" #監聽地址 LISTEN_PORT=10052 #監聽端口 START_POLLERS=5 # 開啓的工做線程數(必須大於等於後面zabbix_server.conf文件的StartJavaPollers參數)
啓動 JavaGateway:$zabbix_server_home/sbin/zabbix_java/startup.sh
修改 zabbix_server 的配置文件:
JavaGateway=127.0.0.1 # JavaGateway 服務器地址,zabbix_server與zabbix_java_gateway在同一臺主機 JavaGatewayPort=10052 #端口 StartJavaPollers=5
啓動 zabbix_server:$zabbix_server_home/sbin/zabbix_server
主機添加 JMX 接口:
zabbix 自帶兩個監控 Tomcat 的模板:Template JMX Generic、Template JMX Tomcat,實際使用的是從網上下載一個 Template:
curl -O https://raw.githubusercontent.com/liujun1990/zabbix/master/zbx_templates_tomcat.xml
導入進模板列表中,添加 Template App Tomcat
堆(Heap)和非堆(Non-heap)內存
按照官方的說法:「Java 虛擬機具備一個堆,堆是運行時數據區域,全部類實例和數組的內存均今後處分配。堆是在 Java 虛擬機啓動時建立的。」「在JVM中堆以外的內存稱爲非堆內存(Non-heap memory)」。能夠看出JVM主要管理兩種類型的內存:堆和非堆。簡單來講堆就是 Java 代碼可及的內存,是留給開發人員使用的;非堆就是JVM留給 本身用的,因此方法區、JVM內部處理或優化所需的內存(如JIT編譯後的代碼緩存)、每一個類結構(如運行時常數池、字段和方法數據)以及方法和構造方法 的代碼都在非堆內存中。