上一篇
Linux如何查看jar运行状态
- Linux
- 2025-07-03
- 4159
使用ps或top命令监控jar进程状态和资源占用;通过jstat检查JVM内存及GC情况;实时追踪日志文件变化;或部署Prometheus等专业工具实现自动化监控告警
为什么需要监控Jar程序?
- 运行状态保障:实时检测进程存活,避免服务中断
- 资源瓶颈预警:识别CPU、内存、线程泄漏等异常
- 故障快速定位:通过日志和线程快照分析崩溃原因
- 性能优化依据:统计GC行为、堆内存使用等JVM指标
基础监控:Linux内置命令
进程状态检查
# 查看Jar进程资源占用(按CPU排序) top -p $(pgrep -f your-app.jar) # 持续监控内存变化 watch -n 5 "ps -p $(pgrep -f your-app.jar) -o pid,%cpu,%mem,rss,vsz,cmd"
- 关键指标:
%MEM
>70% 可能内存泄漏 |%CPU
持续>90% 需检查代码逻辑
端口与网络监控
# 检查服务端口监听状态 netstat -tulnp | grep java # 跟踪网络连接(排查阻塞) ss -tnp | grep $(pgrep -f your-app.jar)
日志监控:实时追踪与分析
基础日志查看
# 动态追踪最新日志 tail -100f /path/to/app.log # 关键错误检索(含上下文) grep -A 10 -B 5 "ERROR" /path/to/app.log
高级日志管理(推荐方案)
- ELK Stack:
使用Filebeat收集日志 → Logstash过滤 → Elasticsearch存储 → Kibana可视化 - 轻量替代:
journalctl -u your-jar-service.service -f
(需配置systemd托管)
JVM深度监控:JDK内置工具
实时性能指标
# 监控GC与堆内存(2秒采样1次) jstat -gcutil $(pgrep -f your-app.jar) 2000 # 输出示例: S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 99.80 10.25 35.62 95.12 92.10 15 0.125 2 0.350 0.475
- 告警阈值:
FGC
(Full GC次数)每小时>5次 |GCT
(GC总时间)占比>10%
线程与堆快照分析
# 生成线程转储(排查死锁) jstack -l $(pgrep -f your-app.jar) > thread_dump.txt # 内存溢出时自动生成堆快照 java -jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dump your-app.jar
自动化监控:企业级方案
Prometheus + Grafana 体系
- 数据采集:
- 部署JMX Exporter暴露JVM指标
java -javaagent:./jmx_prometheus.jar=8080:config.yaml -jar your-app.jar
- 部署JMX Exporter暴露JVM指标
- 仪表盘配置:
导入Grafana模板ID 8563(JVM监控)| 8878(Spring Boot)
告警规则示例(PromQL)
# 堆内存超限告警 sum(jvm_memory_used_bytes{area="heap"}) / sum(jvm_memory_max_bytes{area="heap"}) > 0.8 # 线程死锁检测 jvm_threads_deadlocked > 0
进程存活监控(Zabbix方案)
UserParameter=jar.process.exists[*], pgrep -f $1 | wc -l
- 配置触发器:
{jar.process.exists["your-app.jar"].last()} = 0
最佳实践建议
-
进程托管:
使用systemd
或Supervisord
守护进程,配置自动重启# systemd示例(/etc/systemd/system/jar-app.service) [Service] Restart=on-failure RestartSec=30s
-
健康检查接口:
Spring Boot应用启用Actuator:management: endpoint: health: show-details: always endpoints: web: exposure: include: health,metrics
-
日志规范:
- 强制JSON格式输出
- Logback配置滚动归档和压缩
- 敏感信息脱敏处理
-
资源隔离:
- 使用
cgroups
限制内存:java -jar -XX:+UseCGroupMemoryLimitForHeap ...
- Docker容器部署时设置
--memory-swap
和--cpus
- 使用
引用说明
- Oracle官方JDK监控工具文档:Java Platform SE 8 Tools
- Prometheus JMX Exporter配置指南:GitHub仓库
- Grafana仪表盘模板库:Dashboards | Grafana Labs
- Linux性能分析权威书籍:《Systems Performance: Enterprise and the Cloud, 2nd Edition》
重要提示:生产环境操作前务必在测试环境验证,快照类命令(jmap/jstack)会导致进程暂停,建议在低峰期执行。