在CentOS上做Java应用性能监控,看似简单实则不易——关键在于选对工具、用对方法。下面将常用的监控手段系统梳理,从JVM内置的“亲儿子”到第三方商业套件,再到系统级别的命令,一网打尽。

先说JVM自带的那套工具,它们就在JDK的bin目录下,装好JDK就能用,无需额外安装。
- jstat:专门查看JVM统计信息——类加载、内存分区、GC情况,轻量又直接。
- jmap:用于生成堆转储快照(heap dump),是排查内存泄漏的“核武器”。
- jstack:生成线程转储(thread dump),分析死锁、线程卡顿的一手资料。
- jconsole:图形化监控面板,内存、线程、类加载实时展示,适合快速查看。
- jvisualvm:功能更全,除监控外还能做CPU采样、内存分析,强烈推荐本地调试时使用。
第三方监控工具就丰富多了,适合生产环境和远程分析。
- VisualVM:将多个JDK命令行工具整合成图形界面,本地远程都能用。
- JProfiler:商业级分析器,CPU、内存、线程、数据库访问都能深入剖析。
- YourKit Java Profiler:与JProfiler类似,功能强大,性能开销控制得不错。
- Java Mission Control (JMC):Oracle官方提供的套件,配合飞行记录器(JFR)能获取低开销的运行时数据。
别忘了系统层面的监控,JVM跑在操作系统上,系统资源吃紧也会拖慢应用。
- top / htop:实时查看CPU、内存、进程负载,排查整体资源争抢首选。
- vmstat:进程、内存、分页、IO、CPU活动一网打尽,适合快速定位系统瓶颈。
- iostat:监控磁盘I/O,判断是否因读写过于频繁拖累性能。
- free:简单直接查看内存使用情况,避免物理内存耗尽触发OOM。
- netstat:网络连接、端口监听、丢包情况,网络引发的性能问题全靠它来诊断。
日志分析也不能忽略——很多性能线索就藏在日志里。
- GC日志:通过JVM参数(如
-Xloggc)开启,分析GC频率、停顿时间,是性能调优的关键输入。 - 应用程序日志:在代码中埋设的日志,结合调用链路,能定位到具体方法级别的瓶颈。
分布式场景下,远程监控和APM是标配。
- 可以用 Prometheus + Grafana 搭建开源的监控告警体系,暴露JMX指标或Micrometer数据。
- 商业APM工具如 New Relic、AppDynamics 能提供端到端的事务追踪、代码级性能分析,适合大型团队。
实际落地时,先想清楚监控目标:是要排查内存泄漏?还是优化响应时间?还是做容量规划?然后根据关键性能指标(KPI)选工具。通常组合使用——系统层面用 top + vmstat,JVM层面用 jstat + GC日志,远程监控用Prometheus,关键时刻上 jmap 和 jstack 做深度诊断。别忘了调整JVM参数(比如开启JMX远程端口、配置GC日志),才能让这些工具拿到有效数据。
