OOM问题排查思路与指令
实际生产项目中,不可避免的会遇到服务器内存不足引发告警的问题,很多时候可能就是因为部署的服务占用了太多的内存导致的。
当然,我们可以通过设置java的内存参数来控制内存的最大占用量,但是JVM内存不足了也是一个很头疼的问题。
如果服务部署的时候,允许外部内存检查等VM之类的工具远程连接还好,但是很多公司出于性能等种种原因,并不会开放远程连接的功能。
这样的话,就只能通过指令来定位问题了!
常用指令:
1.top指令:
类似windows环境的任务管理器,可以看到各个进程的使用情况。然后ctrl+m进行排序,找出内存消耗最高的几个进程。
根据pid,查询性能消耗比较高的是什么服务在运行l
ps -ef|grep 26810
2.jstat :虚拟机统计信息监视工具
jstat是用于监视虚拟机各种运行状态信息的命令行工具。可以显示进程中的类加载、内存、垃圾收集、即时编译等运行数据
常用到的如下:
1.jstat -gc *** 间隔时间 输出条数 (监视java堆状况,包括Eden区、2个Survivor区,老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息)
2.jstat -gcutil *** (监视内容与-gc类似,但输出主要关注已使用空间占用总空间的百分比)
3.jmap : java内存映射工具
jmap (Memory Map for Java) 命令用于生成堆转储快照(一般称为:heapdump或dump文件)