在说问题之前,还是那句话,linux 系统一切皆文件。之所以这个错误,那肯定是某些文件有问题。经过查阅相关资料了解到如下:
1.java进程在启动时,在%TEMP%/hsperfdata_%USERNAME%路径下创建进程的临时文件。
- %TEMP% 在windows系统中表示 windows的临时目录。一般在C:\Users\用户名\AppData\Local\Temp
- %TEMP% 在linux 系统中,一般在/tmp目录下
2.java进程创建的临时文件作用
- 存储JVM的运行信息
- 存储jvm 常用命令所获取的数据,例如jcmd ,jps,jmap jstat 等信息。
通过以上的分析,我们自然明白
1.如果操作系统定期清理临时文件,那肯定会导致我们在执行jvm的命令的时候出现错误,
2.有可能我们的运维人员或者运维工具定期清理了这些文件。导致我们的命令无法正确被执行。
所以大多会出现错误信息,Unable to open socket file、process information unavailable等等
解决方法:
方法一 在启动java进程时自定义指定临时文件目录
方法二 操作系统设置java进程的临时文件不被删除