`

Jps介绍以及解决jps无法查看某个已经启动的java进程问题

 
阅读更多

对于jps较熟悉可以直接查看第二部分的分析

 

1、jps的作用

jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command。

 

2、某个java进程已经启动,用jps却显示不了该进程进程号

这个问题已经碰到过两次了,所以在这里总结下。

现象:

用ps -ef|grep java能看到启动的java进程,但是用jps查看却不存在该进程的id。待会儿解释过之后就能知道在该情况下,jconsole、jvisualvm可能无法监控该进程,其他java自带工具也可能无法使用

 

分析:

java程序启动后,默认(请注意是默认)会在/tmp/hsperfdata_userName目录下以该进程的id为文件名新建文件,并在该文件中存储jvm运行的相关信息,其中的userName为当前的用户名,/tmp/hsperfdata_userName目录会存放该用户所有已经启动的java进程信息。对于windows机器/tmp用Windows存放临时文件目录代替。

 

而jps、jconsole、jvisualvm等工具的数据来源就是这个文件(/tmp/hsperfdata_userName/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号,jconsole无法监控等问题

 

原因:

(1)、磁盘读写、目录权限问题

若该用户没有权限写/tmp目录或是磁盘已满,则无法创建/tmp/hsperfdata_userName/pid文件。或该文件已经生成,但用户没有读权限

 

(2)、临时文件丢失,被删除或是定期清理

对于linux机器,一般都会存在定时任务对临时文件夹进行清理,导致/tmp目录被清空。这也是我第一次碰到该现象的原因。常用的可能定时删除临时目录的工具为crontab、redhat的tmpwatch、ubuntu的tmpreaper等等

这个导致的现象可能会是这样,用jconsole监控进程,发现在某一时段后进程仍然存在,但是却没有监控信息了。

 

(3)、java进程信息文件存储地址被设置,不在/tmp目录下

上面我们在介绍时说默认会在/tmp/hsperfdata_userName目录保存进程信息,但由于以上1、2所述原因,可能导致该文件无法生成或是丢失,所以java启动时提供了参数(-Djava.io.tmpdir),可以对这个文件的位置进行设置,而jps、jconsole都只会从/tmp目录读取,而无法从设置后的目录读物信息,这是我第二次碰到该现象的原因

 

关于设置该文件位置的参数为-Djava.io.tmpdir

 

其他:

/tmp/hsperfdata_userName/pid文件会在对应java进程退出后被清除。如果java进程非正常退出(如kill -9),那么pid文件会被保留,直到执行一次java命令或是加载了jvm程序的命令(如jps、javac、jstat),会将所有无用的pid文件都清除掉

 

关于jps更多的介绍,查看oracle介绍 http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

 

 

 
分享到:
评论
10 楼 Trinea 2013-06-07  
zhangj311 写道
我现在jps能够查看到某个java进程,比如eclipse进程,但是用其他jdk工具进行操作时报异常,大神有时间指导一下

按照异常google一下吧
9 楼 zhangj311 2013-06-07  
我现在jps能够查看到某个java进程,比如eclipse进程,但是用其他jdk工具进行操作时报异常,大神有时间指导一下
8 楼 zhangj311 2013-06-07  
windows系统总有的显示有的不显示,什么情况
7 楼 Trinea 2012-08-21  
bloodwolf_china 写道
/tmp/hsperfdata_userName 目录有读写权限,目录下什么都没有
crontab 没发现有清空的任务
设置-Djava.io.tmpdir变量,但是tomcat默认启动都会设置,测试环境jps没问题,现网有问题

可以问下你们公司线网机器的管理员是否做了处理,或是其他java应用是否有这种问题,必须是应用对该目录有读写权限而不是机器账户
6 楼 bloodwolf_china 2012-08-07  
/tmp/hsperfdata_userName 目录有读写权限,目录下什么都没有
crontab 没发现有清空的任务
设置-Djava.io.tmpdir变量,但是tomcat默认启动都会设置,测试环境jps没问题,现网有问题
5 楼 fuyou001 2011-11-29  
我进入/tmp/hsperfdata_userName 目录,什么都没有,但没看了crontab 没发现有清空的任务,这是什么原因导致没有的呢
4 楼 Trinea 2011-11-29  
fuyou001 写道
我进入/tmp/hsperfdata_userName 目录,什么都没有,但没看了crontab 没发现有清空的任务,这是什么原因导致没有的呢

可以根据原因1和3进行排查,即是否有tmp读写权限,以及是否jvm参数设置了-Djava.io.tmpdir
3 楼 fuyou001 2011-11-29  
我进入/tmp/hsperfdata_userName 目录,什么都没有,但没看了crontab 没发现有清空的任务,这是什么原因导致没有的呢
2 楼 Trinea 2011-10-29  
fuyou001 写道
请问楼主,上面的知识有没官方文档链接吗

公司研究java的大牛以前在blog上写的(现在博客注销了),自己也在多次实践中证实了,你可以找个linux机器试试就知道了。下面是oracle网站上的一些介绍

http://blogs.oracle.com/roller-ui/bsc/spider.jsp?entry=c885fd8c0de61f40010df97e54292c7e
It turns out that tha vast majority of these system calls are not for GC and not for JIT compilation - they're to wake up a thread that is for gathering statistics about the VM, which are written to a temporary directory with a name such as /tmp/hsperfdata_${USER}/${PID}, and which can be explored using the jstat tool.


https://forums.oracle.com/forums/thread.jspa?threadID=1174213
If the output is empty please verify that you have readwrite access in the directory /tmp/hsperfdata_<loginname> which is where the JVM stores
all the jvmstat information for a given java process.


https://forums.oracle.com/forums/thread.jspa?threadID=2151967
1 楼 fuyou001 2011-10-29  
请问楼主,上面的知识有没官方文档链接吗

相关推荐

    tomcat解决JPS不可用的问题

    然而,在某些情况下,JPS 命令可能不可用,导致无法查看 Java 进程的信息。 导致 JPS 不可用的原因可能是因为环境变量的配置问题。环境变量是操作系统中的一种机制,用于存储系统的配置信息。环境变量的配置错误...

    启动,停止某个某个java程序

    在Linux或Unix系统中,通常使用`jps`(Java进程查看器)命令找到Java进程ID,然后使用`kill`命令终止进程。一个简单的`stop.sh`脚本可能如下所示: ```bash #!/bin/bash # 查找Java进程 JAVA_PROCESS=$(jps | grep...

    linux下查看java进程下线程占用cpu情况

    - `jstack` 用于打印Java虚拟机的堆栈跟踪信息,可以帮助我们查看某个Java进程中的线程状态,但不直接提供CPU使用情况。结合`jps`获取的进程ID,可以运行 `jstack &lt;进程ID&gt;` 来查看线程详情。 5. **`jinfo` 命令**...

    Linux下启动JAVA

    为了监控Java应用的性能,可以使用`jps`(Java进程状态)列出运行中的Java进程,`jstat`(JVM统计监测工具)查看JVM的统计信息,`jmap`(内存映射工具)生成堆转储,以及`jhat`(堆分析工具)分析堆转储。...

    zabbix监控JAVA 进程 JVM数据统计分析告警监控

    zabbix自动发现JAVA进程,并进行自动添加监控JAVA 进程的JVM数据,统计分析告警监控。 支持多种中间件,tomcat、weblogic、微服务方式部署JAVA应用监控。 自带发现脚本和监控脚本,以及zabbix导入模板。

    java创建进程,及根据命令行、pid删除进程

    这些文件的代码分析可以帮助进一步理解Java进程管理的实践应用。 总结来说,Java提供了一套机制来创建和管理进程,但直接根据命令行参数或PID删除进程则需要借助操作系统特定的工具或API。理解和掌握这些概念对于...

    Linux 下java jps命令使用解析详解

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。 使用 先执行jps –help 查看一下此...

    输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    为了获取这些信息,我们可以使用jstack工具,它是Java开发工具包(JDK)的一部分,能够输出Java进程的线程堆栈跟踪信息。 jstack命令通常可以输出以下类型的信息: 1. 线程的完整堆栈跟踪,包括本地方法。 2. 显示...

    Java长期运行后, jps等工具无法连接jvm

    Java长期运行后,jps等工具无法连接jvm的原因和解决方法 Java长期运行后,jps等工具无法连接jvm是一个常见的问题,很多开发者都曾经遇到过这种情况。这种情况的出现使得故障诊断变得非常困难。那么,究竟是什么原因...

    java 结束word进程

    如果你需要在Java程序中实时监控Word进程,可以定期执行上述命令,或者利用`jps`(Java进程状态工具)来查找相关的Java进程。 6. **安全注意事项** 使用这些方法时要谨慎,因为它们具有很高的权限。无控制地结束...

    jps脚本 shell脚本

    在一个集群非常大的情况下,如果想要查看单个主机在运行哪些java进程。我们可以去到每个主机下,使用jps命令。可是这种方法太过低效。我们可以使用一个shell脚本来完成此命令。查看进程 jps脚本 提前配置免密

    jps+access留言板

    JPS可能是一个自定义的服务框架,用于处理与Java进程相关的任务,而Access数据库则提供数据存储和管理功能。 在描述中,“希望大家都传实在的东西,不要让我们浪费自己的积分”暗示了这个留言板系统可能有积分机制...

    Java内存泄露_JVM监控工具介绍

    jps命令是一个查看JVM里面所有进程的状态的工具,包括进程ID、进程启动的路径等等信息。jps命令可以帮助开发者快速地了解JVM里面所有进程的状态,从而快速定位问题所在。 八、jstatd命令 jstatd命令是一个基于RMI...

    网站地图查询同于jps

    而JPS,全称Java Process Status,是Java应用程序的一种监控工具,主要用来查看运行在Java虚拟机(JVM)上的所有进程的状态。在电子地图服务中,JPS可能用于监控后台服务的运行状况,确保地图数据的实时更新、定位...

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解.docx

    jstack 主要用来查看某个 Java 进程内的线程堆栈信息。语法格式如下:jstack [option] pid 或 jstack [option] executable core 或 jstack [option] [server-id@]remote-hostname-or-ip。指令行参数选项解释如下: ...

    java 操作脚本启动服务

    本主题将详细介绍如何利用Java编写脚本启动和停止服务,以及涉及到的相关技术点。 首先,让我们关注“java操作脚本命令”。在Linux环境中,我们通常使用shell脚本来管理服务。例如,启动一个Java服务,我们可以编写...

    亲测可用java-1.8.0-openjdk.linux.x86_64.zip

    例如,要查看所有Java进程,只需在命令行输入`jps`。如果需要查看特定用户启动的进程,可以加上`-u`选项,如`jps -u`。 4. **其他开发工具**:OpenJDK 1.8.0还包括其他的开发工具,如`jmap`用于内存映射,`jhat`...

    shell脚本执行jps时:-bash: jps: command not found

    执行这些解决方案后,脚本应该能够成功运行,并在每个Hadoop节点上执行`jps`,显示出该节点上运行的Java进程。示例中的输出展示了各个节点上的DataNode、NodeManager、ResourceManager等Hadoop服务的进程ID。 在...

    Java性能调优命令

    此命令非常有用,当需要查看某个Java进程的系统属性或JVM参数时,可以使用`jinfo pid`(pid是进程ID)来列出特定Java进程的详细配置。 3. jstack命令用于产生运行中的Java线程的dump信息。它能打印出Java线程的堆栈...

Global site tag (gtag.js) - Google Analytics