问题
最近遇到一个问题,在容器里执行jps命令后,什么都不显示。按理来说,jps至少会展示下jps这个java命令对应的进程号,但是什么都没有就很奇怪~
jps工作原理
后来了解到,jps命令是要读取**/tmp/hsperfdata_root中记录的进程的,每个java进程启动时(这里假设值root用户启动的java进程,因为其他用户,例如tom启动的java进程会把进程号记录到/tmp/hsperfdata_tom中)会把进程号记录到/tmp/hsperfdata_root**,并且**/tmp/hsperfdata_root**目录的权限不能是777,如果是777的话jdk会认为这个目录不安全,就不记录了。
问题原因
在docker镜像中我们执行了一句chmod -R a+rw /tmp,把/tmp/hsperfdata_root权限改成777了,导致java进程启动时不再把进程号写到这个目录。
解决方法
去掉镜像中chmod -R a+rw /tmp的命令即可。