JVM内存问题排查

最近项目中出现了这样一个问题,有5台虚机上面运行着同样的微服务,每台机器都挂载着8-9个服务,其中一台不知道为什么就挂掉了,不是服务挂了,是机器挂了,shell连不上的那种。
初步诊断思路考虑是不是这台机器上的某个服务把内存撑爆了,所以开始排查内存问题,使用jdk自带脚本,进行内存诊断分析。
123test
1.查看所有Java应用占用的进程(linux常用的是ps -ef|grep java)

jps -l

在这里插入图片描述

2.查看需要监控进程垃圾回收情况,内存使用情况,这里主要看有没有full gc

jstat -gcutil 20954 1000

在这里插入图片描述

3.查看内存对应映射存活情况,这里主要查看对应的java进程有没有大对象,有大对象说明一直占用内存没有释放。

jmap -histo:live 20954 | head -10

在这里插入图片描述
4.生成dump文件快照,导出生成heap.hprof,用内存诊断工具MemoryAnalyzer导入这个dump文件查看分析具体是在哪里OOM,定位到具体的代码

jmap -dump:live,format=b,file=heap.hprof 20954 

在这里插入图片描述

PS:在查到java对应的进程后,也可以查找对应的是哪个线程占用内存异常,按照这种方法也可以排查。
首先得在windows安装pslist命令工具
第一步:进入https://technet.microsoft.com/zh-cn/sysinternals/dd443648工具压缩包下载
第二步: 解压后将pslist.exe复制到C:\Windows\System32目录下
第三步:dos窗口输入pslist,会弹出一个提示窗口提示同意并安装,安装后立马会列举出所有的进程列表

1.查看进程对应的线程

pslist -dmx 20954 

2.然后导出线程的stack文件分析

jstatck 10238 > 1.statck
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值