seo博客写作,上海网站的优化公司哪家好,网站建设简运维 简历,建设信用卡在网站挂失块吗一、说明
jps位于jdk的bin目录下#xff0c;其作用是显示当前系统的java进程情况#xff0c;及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”#xff0c;jps并不使用应用程序名来查找JVM实例。因此#xff0c;它查找所有的Java应用程序…一、说明
jps位于jdk的bin目录下其作用是显示当前系统的java进程情况及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”jps并不使用应用程序名来查找JVM实例。因此它查找所有的Java应用程序包括即使没有使用java执行体的那种例如定制的启动 器。另外jps仅查找当前用户的Java进程而不是当前系统中的所有进程。
二、命令位置
很多Java命令都在jdk的JAVA_HOME/bin/目录下面jps也不例外他就在bin目录下所以他是java自带的一个命令。
三、功能
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令简单实用非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
四、原理
jdk中的jps命令可以显示当前运行的java进程以及相关参数它的实现机制如下 *java程序在启动以后会在java.io.tmpdir指定的目录下就是临时文件夹里生成一个类似于hsperfdata_User的文件夹这个文件夹里在Linux中为/tmp/hsperfdata_{userName}/有几个文件名字就是java进程的pid因此列出当前运行的java进程只是把这个目录里的文件名列一下而已。 至于系统的参数什么就可以解析这几个文件获得。* 先看临时目录
[roothadoop002 hsperfdata_hadoop]# pwd
/tmp/hsperfdata_hadoop
[roothadoop002 hsperfdata_hadoop]# ll
total 160
-rw-------. 1 hadoop hadoop 32768 Jun 3 19:00 51863
-rw-------. 1 hadoop hadoop 32768 Jun 3 19:00 51945
-rw-------. 1 hadoop hadoop 32768 Jun 3 19:00 52035
-rw-------. 1 hadoop hadoop 32768 Jun 3 19:00 52294
-rw-------. 1 hadoop hadoop 32768 Jun 3 19:00 52413在使用jps命令查看
[hadoophadoop002 hadoop-2.6.0-cdh5.7.0]$ jps
52035 SecondaryNameNode
53525 Jps
52294 ResourceManager
51863 NameNode
51945 DataNode
52413 NodeManager对应的进程号都存在。
五、JPS失效处理
现象 用ps -ef|grep java能看到启动的java进程但是用jps查看却不存在该进程的id。待会儿解释过之后就能知道在该情况下jconsole、jvisualvm可能无法监控该进程其他java自带工具也可能无法使用分析 jps、jconsole、jvisualvm等工具的数据来源就是这个文件/tmp/hsperfdata_userName/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号jconsole无法监控等问题
原因
磁盘读写、目录权限问题 若该用户没有权限写/tmp目录或是磁盘已满则无法创建/tmp/hsperfdata_userName/pid文件。或该文件已经生成但用户没有读权限临时文件丢失被删除或是定期清理 对于linux机器一般都会存在定时任务对临时文件夹进行清理导致/tmp目录被清空。这也是我第一次碰到该现象的原因。常用的可能定时删除临时目录的工具为crontab、redhat的tmpwatch、ubuntu的tmpreaper等等 这个导致的现象可能会是这样用jconsole监控进程发现在某一时段后进程仍然存在但是却没有监控信息了。java进程信息文件存储地址被设置不在/tmp目录下 上面我们在介绍时说默认会在/tmp/hsperfdata_userName目录保存进程信息但由于以上1、2所述原因可能导致该文件无法生成或是丢失所以java启动时提供了参数(-Djava.io.tmpdir)可以对这个文件的位置进行设置而jps、jconsole都只会从/tmp目录读取而无法从设置后的目录读物信息这是我第二次碰到该现象的原因