正在和同事在外面吃饭,突然钉钉报警,有一个服务的机器内存飙到百分之90%多。和同事大概聊了一下说是队列累积,机器消费不过来,具体原因也没有深问,又一同事,说看一下是那个对象占的内存,使用jmap,jstat。当时我也在旁边围观,由于之前有看过,我就说jmap在生产环境敢使用吗?
-XX:+HeapDumpOnOutOfMemoryError
,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件 使用参数
-XX:+HeapDumpOnCtrlBreak
然后使用 Ctrl+Break 生成 在 Linux 系统中使用 kill -3 发送进程退出信号“吓唬”虚拟机,让其生成 dump 文件)
2. jstat (JVM statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具他可以显示本地或者远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行数据,在没有GUI图形界面 ,只提供了纯文本控制台环境的服务器上,他是运行期定位虚拟机的首选工具(周志明说)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQojpBgg-1587553128990)(CF4BE02FA6C941DEB23E041B50C4FAE7)]
jmap -dump:format=b,file=dumpHeap.bin 28398
Tips : 但是这个dump在生产环境中还是慎用,因为在dump文件的过程中为保证文件的准确性会停止所有的进程的(个人觉得有点类似于gc 中的stop the word)
cd /usr/local/deploy/supervisord/conf/项目对应的conf文件