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(应用性能管理)工具可实现全链路监控、性能瓶颈分析: