Linux中Java应用怎样监控
导读:Linux下Java应用监控实践指南 一 监控体系与分层 系统级:关注CPU、内存、I/O、网络等资源,常用命令有top/htop、vmstat、pidstat、mpstat,用于快速定位资源瓶颈与异常波动。 JVM级:关注堆/非堆内存、...
Linux下Java应用监控实践指南
一 监控体系与分层
- 系统级:关注CPU、内存、I/O、网络等资源,常用命令有top/htop、vmstat、pidstat、mpstat,用于快速定位资源瓶颈与异常波动。
- JVM级:关注堆/非堆内存、GC次数与耗时、类加载、JIT编译、线程数量与状态,常用工具jps、jstat、jstack、jmap、jconsole/VisualVM、JMC。
- 应用与业务级:关注HTTP延迟、吞吐、错误率、数据库/缓存调用等,可通过Micrometer/Prometheus暴露指标,配合Grafana可视化。
- 日志与告警:使用logrotate管理日志体积,结合ELK集中分析;或用Zabbix通过JMX采集JVM指标并配置阈值告警。
二 快速上手命令清单
- 定位进程:
- 列出Java进程:jps -l
- 实时资源:
- 进程资源:top -p ;系统概况:vmstat 1 5;按进程CPU:pidstat -u 1 5;多核分布:mpstat 1 5
- JVM运行与GC:
- GC统计:jstat -gc 1000;GC利用率:jstat -gcutil 1000
- 线程与内存分析:
- 线程栈:jstack > thread_dump.txt;堆概要:jmap -heap ;堆转储:jmap -dump:live,format=b,file=heapdump.hprof
- 图形化/远程:
- 本地图形工具:jconsole、VisualVM;远程分析:Java Mission Control(JMC)
三 生产级监控方案 Prometheus Grafana
- 应用埋点(Spring Boot示例):
- 依赖(Maven):
- io.micrometer:micrometer-registry-prometheus:1.8.2
- 配置(application.yml):
- management.endpoints.web.exposure.include: prometheus
- management.metrics.export.prometheus.enabled: true
- 依赖(Maven):
- Prometheus抓取:prometheus.yml
- scrape_configs:
- job_name: ‘java-app’
metrics_path: ‘/actuator/prometheus’
static_configs:- targets: [‘localhost:8080’]
- job_name: ‘java-app’
- scrape_configs:
- 启动与验证:
- 启动Prometheus:./prometheus --config.file=prometheus.yml
- 访问http://:9090查询指标;Grafana导入JVM/Micrometer仪表盘展示趋势与告警。
四 企业监控与告警 Zabbix JMX
- 启用JMX(示例,生产请开启认证与SSL):
- java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar your-app.jar
- Zabbix配置:
- 安装Zabbix代理并加载JMX模块,编辑**/etc/zabbix/zabbix_agentd.conf**:
- LoadModule=jmx.so
- Server=< ZABBIX_SERVER_IP>
- Hostname=< YOUR_HOSTNAME>
- 重启代理:systemctl restart zabbix-agent
- 安装Zabbix代理并加载JMX模块,编辑**/etc/zabbix/zabbix_agentd.conf**:
- Web端创建主机与监控项:
- 监控项示例:键值jmx[“java.lang:type=Memory”,“HeapMemoryUsage”],更新间隔60s;可绘制图形并配置阈值告警。
五 常见故障排查路径
- CPU飙高:
- 系统层:top -p 确认热点进程;pidstat -u 1 5定位线程;mpstat 1 5看多核负载分布。
- JVM层:jstack 多次采样,查找RUNNABLE占比高或锁竞争线程;结合jstat -gcutil观察是否因频繁GC引起。
- 内存问题/疑似泄漏:
- jstat -gcutil观察Old/Eden区使用与GC后回收效果;
- 生成堆转储:jmap -dump:live,format=b,file=heapdump.hprof ,用MAT/VisualVM分析对象保留路径;
- 必要时配合jmap -heap查看堆配置与使用情况。
- 线程阻塞/死锁:
- jstack导出线程栈,分析BLOCKED/WAITING状态与锁持有者,定位业务或框架层竞争点。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux中Java应用怎样监控
本文地址: https://pptw.com/jishu/748231.html
