一. jps的创建用html
jps类似于linux中的ps命令,但ps用于显示进程,而jps显示java进程,确切地说,是用户当前启动的java进程信息的一部分。 信息包括进程编号和短进程command。 java
二、某个java进程已经启动,但jps无法显示其进程号linux
这个问题已经碰了两次,现在总结一下。 ubuntu
症状: windows
您可以看到在ps -ef|grepjava中启动的java进程,但在jps中查看时该进程的id不存在。 稍后,您将看到在这种情况下,jconsole、jvisualvm可能无法监视此进程,而其他java可能拥有工具,但无法使用oracle
分析: jvm
启动java程序时,默认情况下会在/tmp/hsperfdata_userName目录下创建一个新文件,其中包含有关运行jvm的信息,并使用进程的id作为文件名。 其中,userName将替换为当前用户名,如果是/tmp/hsperfdata _ username windows计算机/tmp,则替换为存储临时文件的windows目录。 工具
jps、jconsole和jvisualvm等工具的数据源是此文件(/tmp/hsperfdata_userName/pid )。 因此,如果文件不存在或无法读取,则会出现jps无法看到进程号、jconsole无法监视等问题spa
原因: pwa
(1)、磁盘读写、目录权限问题
如果您没有/tmp目录的写入权限,或者磁盘已满,则无法创建/tmp/hsperfdata_userName/pid文件。 或者,文件已生成,但用户没有读取权限
)2)、临时档案丢失、删除或按期清理
在linux计算机上,通常存在清理临时文件夹的计划任务,/tmp目录为空。 这也是我第一次遇到这种现象的原因。 常用的定期删除临时目录的工具有crontab、redhat的tmpwatch、ubuntu的tmpreaper等
这种现象可能会变成这样。 正在jconsole中监视进程。 现在在某个时间段还存在后退的进程,但是没有监视信息。
) 3、java进程信息文件的存储位置已设置,不在/tmp目录下
在前面的说明中,默认情况下流程信息存储在/tmp/hsperfdata_userName目录中,但由于前面1、2中介绍的原因,此文件可能无法生成或丢失,因此在java启动时参数jps
用于设置此文件位置的参数为-Djava.io.tmpdir
其他:
/tmp/hsperfdata_userName/pid文件将在相应的java进程结束后清除。 如果java进程异常终止(如kill-9 ),则pid文件将一直保留到运行java命令或加载jvm程序的命令(如jps、javac、jstat等)为止,并且所有不需要的pid文件都将保留