温馨提示×

centos java日志怎么看内存

小樊
34
2026-10-09 00:06:57
栏目: 编程语言

在 CentOS 上查看 Java 程序日志和内存使用情况,可以从 日志文件、JVM 参数、系统命令、JVM 工具 几个层面来看。下面按常见场景给你梳理。


一、看 Java 日志里的内存信息

1. 应用自身日志

很多 Java 应用(如 Spring Boot)会记录内存或 GC 信息:

# 查看日志文件
tail -f /var/log/your-app/app.log

常见关键字:

  • OutOfMemoryError
  • GC overhead limit exceeded
  • Heap memory

2. JVM GC 日志(最常用)

如果启动参数里有:

-Xloggc:/var/log/java/gc.log

查看 GC 日志:

tail -f /var/log/java/gc.log

分析内容:

  • Young GC / Full GC
  • 堆内存变化
  • GC 耗时

二、用系统命令看 Java 内存占用

1. 查看 Java 进程

ps -ef | grep java

或

jps -l

2. 看进程内存占用

top -p <pid>

或

ps -p <pid> -o pid,vsz,rss,cmd

说明:

  • RSS:实际物理内存占用
  • VSZ:虚拟内存

三、用 JVM 自带工具看内存(强烈推荐)

1. jstat(最常用)

查看堆内存和 GC:

jstat -gc <pid> 1000

示例输出字段:

  • S0C / S1C:Survivor 区大小
  • EC:Eden 区
  • OC:老年代
  • YGC / FGC:GC 次数

查看内存使用率:

jstat -gcutil <pid> 1000

2. jmap(查看堆内存详情)

查看堆内存概况:

jmap -heap <pid>

导出堆快照(排查 OOM):

jmap -dump:live,format=b,file=/tmp/heap.hprof <pid>

⚠️ 注意:

  • 生产环境 dump 可能卡顿
  • 文件可能很大

3. jconsole / visualvm(图形化)

如果服务器有桌面或可以端口转发:

jconsole <pid>

或

jvisualvm

四、Docker / 容器里的 Java(常见坑)

如果是 Docker 容器:

docker stats

⚠️ Java 8 以前可能读不到容器内存限制,建议:

-XX:+UseContainerSupport

五、OOM 时怎么看

1. 自动生成 dump

启动参数加:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof

2. 分析工具

  • Eclipse MAT
  • VisualVM
  • jhat(老)

六、推荐排查顺序(实战)

  1. top / ps 看内存是否异常
  2. jstat -gcutil 看 GC 频率
  3. 看 GC 日志
  4. OOM → jmap dump
  5. MAT 分析对象占用

如果你能贴一下:

  • Java 版本
  • 启动参数
  • 日志报错内容

我可以直接帮你判断是 堆溢出、元空间溢出还是内存泄漏。

0 踩