專案部署客戶端運行約一個月後出現 Java 記憶體溢出,需遠程實時監控 JVM 記憶體、線程、類載入等指標。本文記錄在 RedHat 6.0 + JDK 1.6 + JBoss 5.1 環境下的完整配置過程。
bin/jvisualvm.exe),支援 CPU/記憶體分析、GC 物件追蹤、堆棧反向查詢。修改 JBoss bin/run.sh,在 JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS" 之後追加:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.1.250"
關鍵點:
netstat -an / lsof -i:9999 驗證)。java.rmi.server.hostname 必須設為伺服器實際 IP,否則客戶端無法連線。./run.sh -b 192.168.1.250 & # -b 綁定地址,0.0.0.0 允許所有
本機啟動 %JAVA_HOME%\bin\JConsole,遠程進程輸入 192.168.1.250:9999 即可連線。
$JAVA_HOME/jre/lib/management/jmxremote.password.template 為 jmxremote.password,取消註釋 monitorRole QED(可自定義帳密)。jmxremote.access 對應權限。run.sh 追加:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=/usr/java/jdk1.6/jre/lib/management/jmxremote.password"
chmod 600 jmxremote.password,否則啟動報錯「Password file read access must be restricted」。左側樹狀結構 Remote → 右鍵添加 IP → 右鍵該 IP 選 添加 JMX 連線 → 填入端口、帳密即可。