添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo

背景

日前服务器一个应用总是莫名挂掉,通过排查发现是老年代内存无法回收引起,那么要定位到到底是那一部分数据导致的无法回收,就需要把堆内存dump出来,然后用工具分析。但奇怪的是dump的时候一直报错


Unable to open socket file: target process not responding or HotSpot VM not lo


解决方案

网上找了很多方案,都没效果,最终通过一些文章的启示,自己找到了解决方案。

问题引起的原因

由于Linux一切皆文件的特性,也就是说一个Java进程实际上会对应到一个PID文件,dump命令依赖于进程的PID文件,报错这个是由于这个PID文件可能已经被系统给删除了。


linux系统有个删除管理机制:系统每天会用tmpwatch命令检查并删除 /tmp 下超过240小时未访问过的文件和目录。


问题的解决方案

Linux有个文件(​ ​/usr/lib/tmpfiles.d/tmp.conf​ ​)中记录着一些目录,这些目录中不会被自动删除,我们需要在这个文件中配置我们的JAVA进程的PID目录。

第一步:先找到PID所在目录

先用JPS命令得到进程号

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo_系统版本

32383为我的JAVA应用的进程号,然后我们去​ ​/tmp​ ​目录下找这个进程号

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo_linux_02

很明显这里没有32383,但这里有个​ ​hsperfdata_root​ ​目录不知道是什么东西,进去看看

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo_dump报错_03

这里有31383,那么也就是说​ ​/tmp/hsperfdata_root​ ​目录即是要排除在外的目录。

第二步:把找到的目录添加到文件内容中

vi /usr/lib/tmpfiles.d/tmp.conf

添加如下内容

亲测解决dump导出JAVA堆内存文件报错:Unable to open socket file: target process not responding or HotSpot VM not lo_Unable to open_04

​/*​ ​代表目录下的所有文件,添加之后应该是立即生效的,无需重启。如此,即可避免文件被系统删掉。

其他事项

以上解决方案是我在我的系统中亲测成功的方案,由于系统版本不同,我的解决办法可能不适用于你,你需要尝试。

我的Linux内核版本为​ ​Linux version 3.10.0-1062.1.1.el7.x86_64​

系统版本为​ ​CentOS Linux release 7.5.1804​

我不确定其他系统版本的设置方式是否一致,有的系统可能没有​ ​/usr/lib/tmpfiles.d/tmp.conf​ ​这个文件,那么可以看看是否存在​ ​/etc/cron.daily/tmpwatch​ ​这个文件,存在的话可以在这个文件中添加排除项,添加方式与本文一致。

如果依然无法解决,可以看看我参考的两篇文章,寻找解决方案。


报错: libmysqlclient.so.20: cannot open shared object file: No such file or directory(亲测可用)

启动jumpserver报错 ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory。查找这个libmysqlclient.so.20库文件,由于本机之前部署了mysql

报错:ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or director(亲测可用)

启动jumpserver报错 ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory。查找这个libmysqlclient.so.20库文件,由于本机之前部署了mysql,所以可以查到这个文件(如果没

已解决:导入keras(tf)训练好的模型报错解决OSError: Unable to open file (unable to open file: name = ‘model_3.h5’)

1.场景导入keras训练好的模型报错解决OSError: Unable to open file (unable to open file: name = ‘model_3.h5’)2.解决方法:(1)检查编码格式,检查是否有在文件开头声明UTF-8编码。(2)检查路径是否正确;(3)检查路径是否包含中文,若是有中文,换成英文;(4)重新安装h5py:首先卸载​​pip uninstall h5

SpringBoot启动报错 Disconnected from the target VM, address: '127.0.0.1:61180', transport: 'socket'

今天搭建了一个SpringBoot项目,刚启动就报错 Disconnected from the target VM, a