最近欧拉版本时常出现,jstack或者jstat等问题定位工具打印报错,报Unable to open socket file: target process not responding or HotSpot VM not loaded。
这是由于在tmp/hsperfdata_root目录下保存了java进程id文件,java进程启动时会在这个目录创建这个id文件,并且运行过程中,jvm配置了性能数据更新任务,每50s会更新一次此进程id文件,但是在欧拉版本环境下此进程id文件却不会更新,导致系统自带的systemd-tmpfiles-clean服务会定时清理没有被更变的文件。默认时间是10天。导致上述jstat在通过此进程id查询信息的时候没找到出现上述报错。
要解决上述问题,需要在systemd-tmpfiles-clean的配置文件中排除java进程文件即可。但是为什么在欧拉版本下有这个问题,但是在centos下没有此问题呢?对比发现centos下的进程id文件会被实时更新。但是欧拉版本下只要启动的那一刻才更新,后面不会更新。那为什么欧拉版本下进程id文件不会更新?
怀疑是欧拉版本的openjdk的问题,现在正在尝试中。有知道原因的,可以在下面评论。感谢