游乐游手机版
首页/编程语言/文章详情

Ubuntu中Java应用监控的实用方法详解

时间:2026-07-20 06:46
Java应用在Ubuntu上的监控需从系统级基础命令(ps、top)入手,结合JDK自带工具(jstat、jstack、jmap)进行内存与线程分析,引入Prometheus+Grafana等第三方方案采集JVM指标,SpringBoot项目可借助Actuator与Micrometer增强应用层监控,并通过Shell脚本与crontab实现自动化巡检与告警。

Ja va应用在Ubuntu上跑得好不好,监控这道工序绝对不能省。下面先从系统级基础监控说起,再逐步深入到JDK自带工具、第三方方案、应用层手段,最后给出一个脚本自动化的闭环思路。

Ja va应用在Ubuntu如何监控

一、系统级基础监控

Ubuntu系统自带的那几个命令,用来快速摸清Ja va进程的底细,其实已经够用了:

  • ps命令:想列出所有Ja va进程?ps -ef | grep ja va 就行。要是怕grep把自己也筛出来,换成 ps -ef | grep [j]a va 更干净。
  • top / htop:实时看资源占用,top里按 Shift+M 按内存排序,一目了然。htop 需要先装一下(sudo apt install htop),界面更友好,进程树也看得清。
  • jtop:专门为Ja va应用设计的实时监控工具,安装也简单: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 看整体状态,或者 jtop -p 盯住某个进程。

二、JDK自带工具监控

JDK自带的命令行工具,从进程管理到内存分析、线程诊断,覆盖面很全,而且不用额外装任何东西:

  • jps(Ja va Process Status):列出当前用户下的Ja va进程和PID。简单 jps 显示PID和主类名,jps -v 还能看到启动参数,排查问题很实用。
  • jstat(JVM Statistics Monitoring Tool):实时监控JVM内存、GC、类加载等。比如 jstat -gcutil 5000 10,每5秒刷一次,共10次,堆内存各区域使用率、GC次数和耗时全出来了。
  • jstack(Ja va Stack Trace):生成线程栈跟踪信息,死锁、线程阻塞这类问题,用它准没错。用法:jstack > thread_dump.txt,保存到文件慢慢分析。
  • jmap(Ja va Memory Map):生成堆转储快照(Heap Dump),内存泄漏分析利器。命令:jmap -dump:format=b,file=heapdump.hprof ,生成二进制文件,可以用Eclipse MAT或VisualVM分析。
  • jconsole(Ja va Monitoring Console):图形化监控,可以看到堆内存、方法区、线程、类加载、GC等。启动方式:jconsole,然后选择目标Ja va进程就行。
  • jvisualvm(Ja va VisualVM):功能更强大,集成了前面几个工具的能力,还能做性能剖析、堆转储分析。启动方式:jvisualvm,前提是 JA VA_HOME/bin 在PATH里。

三、第三方监控工具

生产环境要求高可用,单靠自带工具还不够。这里推荐几个成熟的开源/商业方案:

  • Prometheus + Grafana
    Prometheus 是时间序列数据库,通过 JMX Exporter(Ja va袋里)采集JVM指标(内存、GC、线程数等)。在 prometheus.yml 里添加 - targets: [':9090'] 即可抓取。Grafana 负责可视化,连接Prometheus后,用现成的模板(比如“JVM Monitoring”)就能展示内存使用率、GC频率、线程数等实时图表,还能设置告警(比如内存超过80%触发邮件报警)。
  • Zabbix:企业级开源监控,支持监控Ubuntu服务器资源(CPU、内存、磁盘),也通过Zabbix Agent或JMX监控Ja va应用指标。告警方式支持邮件、信息,还能自动修复,适合运维体系比较完善的环境。
  • HertzBeat:新兴的开源实时监控告警系统,兼容Prometheus,最重要的是不需要Agent,Web页面配置监控阈值(响应时间、错误率等),告警支持邮件、钉钉、企业微信,部署很轻量。

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

如果Ja va应用是Spring Boot项目,那监控能力可以更上一层楼:

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

五、脚本自动化监控

上面这些工具基本都是被动监控,但有些场景需要主动巡检、自动恢复。写一个Shell脚本定期检查Ja va应用状态,配合crontab就能实现自动报警和重启:

  • 进程检查脚本(monitor.sh
#!/bin/bash
PID=$(pgrep -f "ja va -jar /path/to/your/app.jar")
if [ -z "$PID" ]; then
    echo "$(date): Ja va应用未运行,正在重启..." >> /var/log/ja va_monitor.log
    nohup ja va -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/ja va_monitor.log
        # 发送邮件报警(需配置mailutils)
        echo "Ja va应用CPU使用率过高:${CPU_USAGE}%" | mail -s "CPU报警" your_email@example.com
    fi
fi
  • 定时任务:用 crontab -e 添加一行,每5分钟执行一次脚本:*/5 * * * * /bin/bash /path/to/monitor.sh

这样一套组合拳打下来,从系统层面到JVM内部,再到应用层和自动化,Ja va应用在Ubuntu上的监控才算真正到位。

来源:https://www.yisu.com/ask/99629524.html
上一篇Ubuntu系统Java版本更新方法 下一篇Linux环境下Python性能优化完整方法与实用技巧详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
ThinkPHP框架搭建从安装到运行完整教程
编程语言 · 2026-07-21

ThinkPHP框架搭建从安装到运行完整教程

使用ThinkPHP搭建开发框架需完成环境准备、项目初始化、配置调整与启动验证四步。环境要求PHP7 1以上及关键扩展,通过Composer创建项目,配置数据库与调试模式,最后运行内置服务器验证。生产环境应改用Nginx或Apache。

Redisson自定义注解与Spring Boot Starter自动配置方法
编程语言 · 2026-07-21

Redisson自定义注解与Spring Boot Starter自动配置方法

先说结论,整个流程的核心就三件事:用注解声明锁的行为,用切面拦截来执行加解锁,用Starter自动把客户端和切面Bean都注册好。无需手动注册,无需额外配置,统一由Starter自动化完成,大幅简化Redisson分布式锁在Spring Boot中的集成。Redisson 自定义注解与 Spring

ThinkPHP5.1结合Swoole实现毫秒级定时任务调度
编程语言 · 2026-07-21

ThinkPHP5.1结合Swoole实现毫秒级定时任务调度

在ThinkPHP5 1项目中,使用Swoole实现毫秒级定时任务调度,需在onWorkerStart回调中启动异步定时器,且仅由worker_id=0的Worker执行。前置条件包括swoole扩展4 8 0以上、协程模式优先用CoroutineTimer。通过自定义Artisan命令统一管理,适用于亚秒级响应、动态启停的深度业务场景。

ThinkPHP跨服务器迁移部署操作步骤
编程语言 · 2026-07-21

ThinkPHP跨服务器迁移部署操作步骤

ThinkPHP跨服务器迁移需确保环境一致性:数据库导出加--no-definer并避免触发器干扰;PHP版本及扩展(openssl、mbstring等)严格对齐;Web服务器root指向public目录,配置伪静态规则;runtime目录清空并确保可写, env文件设置权限与访问控制。

TP6.0电子合同实现 PDF生成与水印签名技术栈
编程语言 · 2026-07-21

TP6.0电子合同实现 PDF生成与水印签名技术栈

TP6 0仅作为Web框架,电子合同需依赖外部工具链。生成PDF可选用tcpdf或dompdf,前者适合结构化合同,后者适合HTML转PDF。水印需在每页底层绘制矢量文字并锁定图层,防止被移除。签名需结合CA认证和数字签名,仅插入图片不具有法律效力。