Ubuntu Java服務監控方法
Java JDK自帶多組命令行工具,適合快速查看Java服務的基礎運行狀態,無需額外安裝軟件:
jps
(默認顯示PID和類名,添加-l
參數可顯示完整包名)。jstat -gcutil <PID> 5000 10
表示每5秒采集一次目標Java進程(<PID>
)的GC利用率,共采集10次。jmap -dump:format=b,file=heapdump.hprof <PID>
。jstack <PID> > thread_dump.txt
(將輸出保存到文件)。jconsole
,選擇目標Java進程即可連接。jconsole
基礎上增加了內存分析、線程分析、堆轉儲解析、抽樣器等功能,啟動命令為jvisualvm
。對于生產環境,建議使用第三方工具實現自動化監控、告警、可視化,提升運維效率:
/metrics
);-javaagent:/path/to/jmx_prometheus_javaagent.jar=8080:/path/to/config.yml
),然后在Prometheus中添加目標(http://<Ubuntu_IP>:8080/metrics
),最后在Grafana中導入JVM監控模板(如ID: 6756)。wget https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1ubuntu20.04_all.deb
),安裝zabbix-server-mysql
、zabbix-frontend-php
、zabbix-agent
,配置Zabbix Agent采集Java指標(通過UserParameter或JMX接口)。通過Shell腳本定期檢查Java服務狀態,實現簡單的自動化監控與告警:
#!/bin/bash
THRESHOLD=80 # CPU使用率閾值(%)
EMAILS="admin@example.com" # 接收報警郵件的地址
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}') # 計算CPU使用率
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "$CURRENT_TIME - 當前CPU使用率:${CPU_USAGE}%(超過閾值${THRESHOLD}%)" | mail -s "Java服務CPU使用率報警" $EMAILS
fi
將腳本保存為check_cpu.sh
,添加執行權限(chmod +x check_cpu.sh
),然后通過crontab -e
設置定時任務(如每5分鐘執行一次:*/5 * * * * /path/to/check_cpu.sh
)。對于分布式Java應用,APM(應用性能管理)工具可實現全鏈路監控、性能瓶頸分析: