首页主机资讯CentOS如何监控Java应用性能

CentOS如何监控Java应用性能

时间2026-01-21 03:43:03发布访客分类主机资讯浏览949
导读:CentOS 监控 Java 应用性能 一 快速排障命令 查看进程与参数:使用 ps -ef | grep java 或 jps -v 获取 PID 与启动参数。 资源占用:用 top -p 实时查看 CPU、内存;系统级资源可用 ds...

CentOS 监控 Java 应用性能

一 快速排障命令

  • 查看进程与参数:使用 ps -ef | grep javajps -v 获取 PID 与启动参数。
  • 资源占用:用 top -p 实时查看 CPU、内存;系统级资源可用 dstat -ta 1nmon 观察 CPU、内存、磁盘 I/O、网络
  • JVM 堆与 GC:用 jstat -gcutil < 间隔秒> < 次数> 查看 Eden/Survivor/Old、YGC/YGCT、FGC/FGCT;需要更细的 GC 细节可开启 -XX:+PrintGCDetails -Xloggc:< 文件>
  • 线程与锁:用 jstack 抓取线程栈,排查 死锁/阻塞/长时间运行线程
  • 内存快照与对象统计:用 jmap -dump:format=b,file=heap.hprof 导出堆转储,配合 jmap -histo 查看对象数量与占用。
  • 远程可视化:用 JConsoleVisualVM 通过 JMX 连接查看 内存、线程、类加载、CPU 等。
    以上命令覆盖了进程、系统、JVM 与线程/内存分析的常见场景,适合日常巡检与问题定位。

二 启用 JMX 远程监控

  • 启动参数示例(仅测试环境,生产请开启认证与 SSL):
    java -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=9010
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -jar yourapp.jar
  • 连接与采集:在 JConsole/VisualVM 选择“远程”,填入 host:9010;也可用 JMXServiceURL(“service:jmx:rmi:///jndi/rmi://:/jmxrmi”) 编程采集 MBeans(如 MemoryMXBean)。
  • 安全建议:生产环境务必启用 用户名/密码SSL,并限制来源 IP 与端口访问。
    JMX 提供了对 内存、线程、类、GC 等信息的标准化访问,是 Java 应用监控的通用入口。

三 指标化与可视化监控

  • 埋点与暴露:在应用中集成 Micrometer,对接 Prometheus;Spring Boot 可启用 Actuator 暴露 /actuator/prometheus
  • JMX 到 Prometheus:使用 JMX ExporterJVM/JMX 指标转换为 Prometheus 格式,便于统一采集与告警。
  • 存储与展示:用 Prometheus 拉取指标,Grafana 配置 JVM/Memory/GC/Thread 等面板进行可视化。
  • 分布式追踪:引入 SkyWalkingZipkin 采集 调用链与延迟,定位跨服务瓶颈。
    该方案适合长期观测、容量评估与告警体系建设。

四 关键指标与告警阈值

  • 系统资源:持续高 CPU(> 80%)内存不足/频繁换页磁盘 I/O 饱和网络带宽打满 都可能引发应用抖动。
  • JVM 堆与 GC:Old 区使用率持续 > 70%FGC 频繁或单次耗时明显上升GC 后回收效果差 需重点关注。
  • 线程与阻塞:线程总数异常增长大量 BLOCKED/WAITING、出现 死锁 需立即排查。
  • 应用层:接口 P95/P99 延迟升高错误率上升线程池队列积压 常指示业务或资源瓶颈。
    这些信号结合 top/dstat/nmonjstat/jstack/jmap 能快速定位根因。

五 一键巡检脚本示例

  • 用途:快速输出 PID、资源占用、GC 概况、线程数、可疑死锁
  • 示例脚本(保存为 monitor_java.sh,chmod +x 后运行):
    #!/usr/bin/env bash
    set -e
    
    APP=$1
    if [ -z "$APP" ];
         then
      echo "Usage: $0 <
        jar/pattern>
    "
      exit 1
    fi
    
    PID=$(jps -l | grep -i "$APP" | awk '{
    print $1}
        ' | head -n1)
    if [ -z "$PID" ];
         then
      echo "Java process not found: $APP"
      exit 2
    fi
    
    echo "=== Process: $PID ==="
    ps -p $PID -o pid,ppid,cmd,%cpu,%mem,etime
    
    echo -e "\n=== CPU/Memory (top) ==="
    top -b -n 1 -p $PID | tail -n 1
    
    echo -e "\n=== GC Utilization ==="
    jstat -gcutil $PID 1 5
    
    echo -e "\n=== Thread Count ==="
    jstack $PID | grep -E '^\s*"' | wc -l
    
    echo -e "\n=== Top 10 Threads (CPU) ==="
    jstack $PID | grep -E '^\s*"' | sort -k2 -nr | head -10
    
    echo -e "\n=== Deadlock Check ==="
    jstack $PID | grep -A 30 "Found one Java-level deadlock" || echo "No deadlock found."
    
  • 建议:将脚本加入 crontab 定时巡检,异常时输出到日志并触发告警。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS如何监控Java应用性能
本文地址: https://pptw.com/jishu/788053.html
Java在CentOS上的网络配置技巧 CentOS Java日志配置在哪里

游客 回复需填写必要信息