温馨提示×

Java应用在Ubuntu如何监控

小樊
66
2025-10-01 14:17:17
栏目: 编程语言

Java应用在Ubuntu上的监控方法

一、系统级基础监控

通过Ubuntu自带的系统命令,快速查看Java应用的进程状态和资源占用情况:

  • ps命令:列出所有Java进程,可通过ps -ef | grep java筛选,或ps -ef | grep [j]ava避免自身进程干扰。
  • top/htop命令:实时监控系统资源使用情况,top中按Shift+M按内存排序,htop(需安装:sudo apt install htop)提供更直观的界面。
  • jtop命令:专为Java应用设计的实时监控工具,安装后(wget https://github.com/kwhat/jtop/releases/download/v0.7.3/jtop-0.7.3.jar && chmod +x jtop-0.7.3.jar && sudo mv jtop-0.7.3.jar /usr/local/bin/jtop.jar),通过jtop查看整体Java进程状态,或jtop -p <PID>监控指定进程。

二、JDK自带工具监控

JDK提供了一系列命令行工具,覆盖进程管理、内存分析、线程诊断等场景:

  • jps(Java Process Status):列出当前用户的Java进程及其PID,用法:jps(显示PID和主类名),jps -v(显示详细启动参数)。
  • jstat(JVM Statistics Monitoring Tool):实时监控JVM内存、垃圾回收(GC)、类加载等指标,例如jstat -gcutil <PID> 5000 10(每5秒刷新一次,共10次,显示堆内存各区域使用率及GC次数)。
  • jstack(Java Stack Trace):生成Java线程的栈跟踪信息,用于诊断死锁、线程阻塞等问题,用法:jstack <PID> > thread_dump.txt(将输出保存到文件便于分析)。
  • jmap(Java Memory Map):生成Java堆转储快照(Heap Dump),用于分析内存泄漏,用法:jmap -dump:format=b,file=heapdump.hprof <PID>(生成二进制堆转储文件)。
  • jconsole(Java Monitoring Console):图形化工具,监控JVM内存(堆、方法区)、线程、类加载、GC等情况,启动方式:jconsole(选择目标Java进程即可)。
  • jvisualvm(Java VisualVM):功能更强大的图形化工具,集成了jpsjstatjstack等功能,支持生成堆转储、线程分析、性能剖析,启动方式:jvisualvm(需确保JAVA_HOME/bin在PATH中)。

三、第三方监控工具

针对生产环境的高可用需求,推荐使用以下开源/商业工具:

  • Prometheus + Grafana
    • Prometheus:开源时间序列数据库,通过JMX Exporter(Java代理)采集Java应用的JVM指标(如内存、GC、线程数),配置Prometheus抓取目标(prometheus.yml中添加- targets: ['<Ubuntu_IP>:9090'])。
    • Grafana:开源可视化平台,连接Prometheus后,通过模板(如"JVM Monitoring")展示内存使用率、GC频率、线程数等指标的实时图表,支持设置告警(如内存超过80%触发邮件报警)。
  • Zabbix:企业级开源监控解决方案,支持监控Ubuntu服务器资源(CPU、内存、磁盘)、Java应用指标(通过Zabbix Agent或JMX),提供告警(邮件、短信)、自动修复等功能。
  • HertzBeat:开源实时监控告警系统,兼容Prometheus,无需Agent,通过Web页面配置Java应用的监控阈值(如响应时间、错误率),支持邮件、钉钉、企业微信告警。

四、应用层监控(Spring Boot项目推荐)

若Java应用为Spring Boot项目,可通过以下方式增强监控能力:

  • Spring Boot Actuator:内置监控端点,暴露应用健康状况、内存使用、线程信息等指标。添加依赖(org.springframework.boot:spring-boot-starter-actuator),配置management.endpoints.web.exposure.include=*(开启所有端点),访问http://<Ubuntu_IP>:8080/actuator/health查看健康状态,http://<Ubuntu_IP>:8080/actuator/metrics查看所有指标。
  • Micrometer:与Actuator集成,支持将指标发送到Prometheus、Grafana等工具,例如添加micrometer-registry-prometheus依赖,Actuator会自动暴露Prometheus格式的指标端点(/actuator/prometheus)。

五、脚本自动化监控

通过Shell脚本定期检查Java应用状态,实现自动报警和重启:

  • 进程检查脚本(monitor.sh
    #!/bin/bash
    PID=$(pgrep -f "java -jar /path/to/your/app.jar")
    if [ -z "$PID" ]; then
      echo "$(date): Java应用未运行,正在重启..." >> /var/log/java_monitor.log
      nohup java -jar /path/to/your/app.jar > /dev/null 2>&1 &
    else
      CPU_USAGE=$(top -bn1 -p $PID | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
      if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
        echo "$(date): CPU使用率过高(${CPU_USAGE}%),发送报警..." >> /var/log/java_monitor.log
        # 发送邮件报警(需配置mailutils)
        echo "Java应用CPU使用率过高:${CPU_USAGE}%" | mail -s "CPU报警" your_email@example.com
      fi
    fi
    
  • 定时任务:通过crontab -e添加定时任务,每5分钟执行一次脚本:*/5 * * * * /bin/bash /path/to/monitor.sh

0