jvm監控須要在配置zabbix編譯環境的時候支持java --enable-java #須要安裝依賴包 yum install java* -yhtml
https://zh.osdn.net/projects/sfnet_zabbix/releases/
1. 從新編譯安裝zabbix ./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-openipmi && make && make install
2. 查看是否支持jvm監控 ls /usr/local/zabbix/sbin ------此處爲我zabbix安裝目錄 zabbix_agent zabbix_agentd zabbix_java zabbix_proxy zabbix_server-->啓動zabbix_java /usr/local/zabbix/sbin/zabbix_java/startup.sh
3. 編輯catalina.sh,加入以下配置 CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345" ----須要將hostname寫入到hosts中
注意:CATALINA_OPTS表示僅對tomcat有效,若是是JAVA_OPTS表示對全部的JAVA進程都有效 --------啓動tomcat和zabbix_java #/usr/local/zabbix/sbin/zabbix_java/start.sh
4. 修改zabbix_server.conf開啓zabbix_java監控
配置zabbix監控javajava
選擇java模板mysql
5. zabbix監控多臺jvm 在tomcat服務器上添加以下配置: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.0.244"
6. 在zabbix管理頁面配置主機監控便可 如步驟4,ip爲tomcat服務器ip,端口爲tomcat開放的端口
7. 監控的兩臺tomcat jvm均可以看到數據
新生代:主要是用來存放新生的對象。通常佔據堆的1/3空間。因爲頻繁建立對象,因此新生代會頻繁觸發MinorGC進行垃圾回收。 新生代又分爲 Eden區、ServivorFrom、ServivorTo三個區。 Eden區:Java新對象的出生地(若是新建立的對象佔用內存很大,則直接分配到老年代)。當Eden區內存不夠的時候就會觸發MinorGC,對新生代區進行一次垃圾回收。 ServivorTo:保留了一次MinorGC過程當中的倖存者。 ServivorFrom:上一次GC的倖存者,做爲這一次GC的被掃描者 老年代:主要存放應用程序中生命週期長的內存對象。 老年代的對象比較穩定,因此MajorGC不會頻繁執行。在進行MajorGC前通常都先進行了一次MinorGC,使得有新生代的對象晉身入老年代,致使空間不夠用時才觸發。當沒法找到足夠大的連續空間分配給新建立的較大對象時也會提早觸發一次MajorGC進行垃圾回收騰出空間。 永久代 指內存的永久保存區域,主要存放Class和Meta(元數據)的信息,Class在被加載的時候被放入永久區域. 它和和存放實例的區域不一樣,GC不會在主程序運行期對永久區域進行清理。因此這也致使了永久代的區域會隨着加載的Class的增多而脹滿,最終拋出OOM異常。 在Java8中,永久代已經被移除,被一個稱爲「元數據區」(元空間)的區域所取代。 元空間的本質和永久代相似,都是對JVM規範中方法區的實現。不過元空間與永久代之間最大的區別在於:元空間並不在虛擬機中,而是使用本地內存。所以,默認狀況下,元空間的大小僅受本地內存限制。類的元數據放入 native memory, 字符串池和類的靜態變量放入java堆中. 這樣能夠加載多少類的元數據就再也不由MaxPermSize控制, 而由系統的實際可用空間來控制. 採用元空間而不用永久代的幾點緣由:(參考:http://www.cnblogs.com/paddix/p/5309550.html) 1、爲了解決永久代的OOM問題,元數據和class對象存在永久代中,容易出現性能問題和內存溢出。 2、類及方法的信息等比較難肯定其大小,所以對於永久代的大小指定比較困難,過小容易出現永久代溢出,太大則容易致使老年代溢出(由於堆空間有限,此消彼長)。 3、永久代會爲 GC 帶來沒必要要的複雜度,而且回收效率偏低。 堆內存和非堆內存:http://www.importnew.com/27645.html
=============================================================================================================================================sql
更新一下,這個問題困擾了我兩天,百度搜索出來的都是大同小異,沒什麼區別。因爲咱們生產機器firewalld都是開啓的,因此上面的配置會出現No route to host (Host unreachable)狀況apache
cd /mkt/tomcat/8.5.32/
mkdir ./10001/lib ----此處有不一樣,咱們生產的機器用的是同一個catalina.sh,setclasspath.sh,是本身編寫的start.sh來調用tomcat的bin目錄下的腳本和lib下的jar包和類
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.12/bin/extras/catalina-jmx-remote.jar -O ./10001/lib
vim ./10001/bin/start.sh 添加一下參數 通常是在catalina.sh添加參數,咱們生產是本身寫的啓動腳本,再調用catalina腳本。因此只能在啓動腳本里面添加參數。
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.0.16 -Djavax.management.builder.initial=" vim ./10001/conf/server.xml <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346" /> ---12345爲通訊端口,12346爲數據傳輸端口 firewall-cmd --zone=public --add-port=12345/tcp --permanent firewall-cmd --zone=public --add-port=12346/tcp --permanent fire-cmd --reload 在zabbix監控頁面監控12345端口便可
[liutao@app1 8.5.32]$ cat 10001/bin/startup.sh #!/bin/bash export JAVA_HOME=/mkt/jdk1.8.0_171 export JRE_HOME=/mkt/jdk1.8.0_171/jre export CATALINA_HOME=/mkt/tomcat/8.5.32 export CATALINA_BASE="/mkt/tomcat/8.5.32/10001" export CATALINA_TMPDIR="$CATALINA_BASE/temp" export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid" #export JAVA_OPTS="-server -Xms512m -Xmx512m -Djava.awt.headless=true -Dtomcat.name=10001 -javaagent:/mkt/skywalking/5.0.0/agent/skywalking-agent.jar -Dskywalking.agent.application_code=dev.mstore10001" export JAVA_OPTS="-server -Xms512m -Xmx512m -Djava.awt.headless=true -Dtomcat.name=10001" export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.0.175 -Djavax.management.builder.initial=" #建立logs目錄 if [ ! -d "$CATALINA_BASE/logs" ]; then mkdir $CATALINA_BASE/logs fi #建立temp目錄 if [ ! -d "$CATALINA_BASE/temp" ]; then mkdir $CATALINA_BASE/temp fi # 調用tomcat啓動腳本 bash $CATALINA_HOME/bin/startup.sh "$@"
[liutao@app1 8.5.32]$ cat 10001/bin/shutdown.sh #!/bin/bash export JRE_HOME=/mkt/jdk1.8.0_171/jre export CATALINA_HOME=/mkt/tomcat/8.5.32 export CATALINA_BASE="/mkt/tomcat/8.5.32/10001" export CATALINA_TMPDIR="$CATALINA_BASE/temp" export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid" bash $CATALINA_HOME/bin/shutdown.sh "$@"
==================================================================================================== 監控公司jar包 下載cmdline-jmxclient-0.10.3.jar java -jar cmdline-jmxclient-0.10.3.jar - 192.168.0.252:9802 另外沒有加載的類可使用jdk解壓目錄下bin下面的jstat -gc PID去抓取參數,進行自定義監控
獲取參數:java -jar cmdline-jmxclient-0.10.3.jar - 192.168.0.252:9802 java.lang:name=Metaspace,type=MemoryPool 獲取參數值:java -jar cmdline-jmxclient-0.10.3.jar - 192.168.0.252:9802 java.lang:name=Metaspace,type=MemoryPool Usage 對應的zabbix key爲:jmx["java.lang:name=Metaspace,type=MemoryPool","Usage.used"]