温馨提示×

Ubuntu Java服务如何监控

小樊
44
2025-09-18 16:39:57
栏目: 编程语言

Ubuntu Java服务监控方法

一、Java自带命令行工具(基础监控)

Java JDK自带多组命令行工具,适合快速查看Java服务的基础运行状态,无需额外安装软件:

  • jps:列出当前系统所有Java进程的PID及主类名称,用法为jps(默认显示PID和类名,添加-l参数可显示完整包名)。
  • jstat:实时监控JVM内存、垃圾回收(GC)、类加载等指标,例如jstat -gcutil <PID> 5000 10表示每5秒采集一次目标Java进程(<PID>)的GC利用率,共采集10次。
  • jmap:生成Java堆转储快照(Heap Dump),用于分析内存泄漏或对象占用情况,例如jmap -dump:format=b,file=heapdump.hprof <PID>
  • jstack:打印Java线程的栈跟踪信息,用于诊断死锁、线程阻塞等问题,例如jstack <PID> > thread_dump.txt(将输出保存到文件)。
  • jconsole:图形化监控工具,支持查看JVM内存(堆/非堆)、线程数量、类加载、CPU使用率等指标,启动命令为jconsole,选择目标Java进程即可连接。
  • jvisualvm:功能更强大的图形化工具(基于NetBeans平台),在jconsole基础上增加了内存分析、线程分析、堆转储解析、抽样器等功能,启动命令为jvisualvm

二、第三方监控工具(生产级推荐)

对于生产环境,建议使用第三方工具实现自动化监控、告警、可视化,提升运维效率:

  • Prometheus + Grafana
    • Prometheus:开源时间序列数据库,负责采集和存储监控指标;
    • JMX Exporter:Java代理程序,将JVM指标转换为Prometheus可识别的格式(如HTTP端点暴露/metrics);
    • Grafana:可视化平台,通过Prometheus数据源展示JVM内存、GC、线程、CPU等指标的仪表盘(如“Java应用监控”大盘),支持告警规则配置(如内存使用率超过80%触发邮件报警)。 配置步骤:在Java服务启动时添加JMX Exporter参数(如-javaagent:/path/to/jmx_prometheus_javaagent.jar=8080:/path/to/config.yml),然后在Prometheus中添加目标(http://<Ubuntu_IP>:8080/metrics),最后在Grafana中导入JVM监控模板(如ID: 6756)。
  • Zabbix: 企业级开源监控解决方案,支持监控Java进程状态、JVM指标、系统资源(CPU、内存、磁盘),提供告警(邮件、短信、Slack)、自动发现、分布式监控等功能。安装步骤:在Ubuntu上添加Zabbix仓库(wget https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1ubuntu20.04_all.deb),安装zabbix-server-mysqlzabbix-frontend-phpzabbix-agent,配置Zabbix Agent采集Java指标(通过UserParameter或JMX接口)。
  • HertzBeat: 开源自托管实时监控告警系统,支持Java应用、数据库、中间件等监控,无需Agent(通过HTTP API采集指标),提供“应用服务”“JVM”“线程”等监控模块,支持阈值告警(如CPU使用率超过阈值发送钉钉/企业微信通知)。

三、脚本监控(自定义需求)

通过Shell脚本定期检查Java服务状态,实现简单的自动化监控与告警

  • 监控脚本示例(CPU占用率检测)
    #!/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)。

四、APM工具(分布式系统/深度性能分析)

对于分布式Java应用,APM(应用性能管理)工具可实现全链路监控、性能瓶颈分析

  • MyPerf4J:高性能、无侵入的Java性能监控工具,支持实时采集QPS、RT、异常数、方法耗时等指标,输出到控制台或日志文件(可通过Logstash采集到Elasticsearch),适合高并发场景。
  • Stagemonitor:Java监控代理程序,集成Metrics、ELK、Prometheus等,提供实时监控、历史数据查询、性能分析(如SQL慢查询、方法调用链)。
  • Pinpoint:针对大规模分布式系统的APM工具,支持服务拓扑图、调用链追踪、异常检测,帮助定位分布式系统中的性能问题(如某服务节点响应慢导致整体链路延迟)。

0