`
weigang.gao
  • 浏览: 486230 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jps能够显示java进程但jconsole等监控工具无法连接问题

 
阅读更多

jps能够显示java进程但jconsole等监控工具无法连接问题

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文件(其中userName为当前登陆的用户名)。或该文件已经生成,但用户没有读权限

 

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

对于linux机器,一般都会存在定时任务对临时文件夹进行清理,导致/tmp目录被清空。这也是我第一次碰到该现象的原因

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

 

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

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

 

分析:我遇到的是第一种情况,由于生成的java进程信息文件存储到C盘,如下

C:\Users\316311\AppData\Local\Temp\hsperfdata_316311 

而当前账户对这个目录下面的java进程信息文件没有读取的权限,所以jConsole工具无法连接。

解决办法:修改系统环境变量TMP,使jConsole工具有权限读取文件夹(hsperfdata_316311)中的java进程信息文件。 


 

 

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

其他:

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

 

         这个问题只会在jdk 6u23和6u24上出现,在6u23和6u24上,进程信息会保存在-Djava.io.tmpdir下,  因此如果它被设置为非/tmp目录则会导致 jps,jconsole等无法读取的现象,  但在其他版本的jdk上,即使设置-Djava.io.tmpdir为非/tmp,   也会在/tmp/hsperfdata_userName下保存java进程信息.因此可以说这是6u23和6u24的bug,

        以下是jdk对该bug的描述地址:

bug描述:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7021676

bug的修复描述:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7009828

bug修改代码:

http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/34d64ad817f4

 

如bug中的描述,如果运行的jdk版本是6u23或6u24,而此时又想看监控信息,可以按以下方式进行尝试:

 Running monitoring applications with -J-Djava.io.tmpdir=(application java.io.tmpdir) works if you only wish to monitor that application. Setting the application's java.io.tmpdir to the system default works as long as the applications don't create conflicting file names. Conflicting file names are likely when more than one copy of a servlet container such as Tomcat is being run.

 

 

参考:http://trinea.iteye.com/blog/1196400

          http://my.oschina.net/chape/blog/412132

  • 大小: 16.1 KB
分享到:
评论

相关推荐

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

    jdb命令是一个强大的调试工具,用于对core文件和正在运行的Java进程进行实时地调试。jdb工具可以帮助开发者快速地定位问题所在,并提供丰富的命令帮助开发者进行调试。 六、jstat命令 jstat命令是一个实时的命令行...

    Java性能监控工具

    `jconsole`和`jvisualvm`都是图形化的性能监控工具,它们提供了丰富的界面,可以实时监控Java应用的CPU使用、内存分配、线程状态等。`jvisualvm`还支持生成各种报告和分析堆内存转储。 `jhat`是一个命令行工具,...

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    jdb是一个命令行工具,用于对Core文件和正在运行的Java进程进行实时调试。jdb工具包含了丰富的命令,帮助您进行调试。jdb工具的功能与Sun Studio中的dbx非常相似,但jdb专门用于Java应用程序的调试。 jstat jstat...

    JAVA JVM内存监控工具总结

    【Java JVM内存监控工具详解】 Java JVM内存监控是优化Java应用程序性能的关键环节,而VisualVM作为一款集成...在实际开发过程中,结合VisualVM等工具进行综合分析,能够更好地理解和解决问题,提升Java应用的性能。

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...

    jvm监控工具介绍

    当程序出现死锁、CPU占用过高或无法响应等问题时,jstack能够提供详细的线程堆栈信息,包括Java堆栈和本地堆栈,帮助定位问题所在。此工具适用于Solaris和Linux平台的JDK版本。 2. **jconsole**: jconsole是一款...

    jvm内存监控工具使用

    JConsole 是一个图形化工具,提供了丰富的监控功能,包括但不限于内存使用、线程状态、类加载、垃圾收集等。它能够以图表的形式展示各种数据,使开发者能够直观地理解 JVM 的运行状态。此外,JConsole 支持远程连接...

    xmanage远程打开jconsole

    总结来说,通过xmanage远程打开Jconsole是一种有效的解决Jconsole远程连接问题的方法,它利用了X Window协议和环境变量DISPLAY的特性,使得我们可以在本地机器上直观地监控远程服务器上的Java应用。然而,实施这一...

    The jconsole Tool-introduction.doc

    在Unix或Linux系统上,可以通过`ps`命令查找java进程的PID;在Windows系统上,可以通过任务管理器查找java或javaw进程的PID;另外,也可以使用`jps`命令行工具来获取进程ID。 例如,如果测试应用的PID为2956,启动...

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

    3. **JPS命令**:`jps`是Java进程状况工具(Java Process Status)的缩写,它是JDK提供的一种实用程序,用于显示当前系统中正在运行的Java虚拟机实例。使用`jps`命令,开发者可以轻松地查看哪些Java应用程序正在运行...

    jconsole+tomcat配置说明 附加Tomcat内存说明(基于jdk5.0).docx )

    例如,Unix/Linux系统下使用`ps`命令查找Java进程的PID,Windows系统则可以通过任务管理器或`jps`命令获取。连接命令格式为`jconsole [PID]`。 3. **远程监控**: 若要远程监控Java应用,需要知道目标主机的IP地址或...

    JVM监控工具介绍.docx

    这对于找到要监控的特定Java进程非常有用。 7. **jstat**: `jstat` 是最强大的工具之一,它提供了丰富的统计选项,可以监视类加载、编译、GC等相关信息。例如,`-class` 选项可以监控类加载和卸载,`-gc` 选项...

    使用java自带工具监控jvm运行状态

    `jstack`工具用于打印Java进程的线程堆栈跟踪,这对于分析死锁、线程阻塞等问题非常有用。通过`jstack <pid>`,你可以看到每个线程的当前状态(如RUNNABLE、WAITING、TIMED_WAITING或TERMINATED)以及它们执行的...

    Java诊断工具源代码.zip

    1. **JVM内置工具**:Java虚拟机(JVM)提供了多种内置的诊断工具,如`jps`(Java进程状态工具)、`jstat`(Java统计监视工具)、`jinfo`(配置信息工具)、`jmap`(映射工具)、`jhat`(堆分析工具)和`jstack`...

    java—JDK内置工具使用技巧详解

    - **功能**:jconsole 是一个基于 JMX(Java Management Extensions)技术的图形化监控工具,能够实时显示 JVM 的内存使用情况、垃圾回收状态等信息。 - **使用场景**:适用于需要实时监控 Java 应用程序资源使用...

    JDK自带VM分析工具

    综上所述,JDK 自带的 VM 分析工具 jps、jstat、jmap 和 jconsole 提供了丰富的功能,可以帮助开发者有效地监控和诊断 Java 应用程序的性能问题。掌握这些工具的使用方法,不仅有助于提升开发效率,还能显著提高应用...

    JAVA命令大全.pdf

    9. jps.exe:这是一个JVM进程状态工具,用于列出正在运行的Java进程及其ID,类似于Unix系统中的ps命令。 10. jstat.exe:JVM统计监控工具,用于监视垃圾回收、类加载等信息。 11. jstatd.exe:此工具提供了一个...

    java工具

    9. **Java运行时信息工具** - `jps`、`jstat`:`jps`列出运行中的Java进程,`jstat`则用于收集JVM的统计信息,如类加载、内存、垃圾收集等。 10. **配置工具** - `java.exe` 和 `javaws.exe`:分别用于运行标准的...

    java8 tools.jar

    4. **诊断工具**:`jps`(Java进程查看器)、`jstack`(线程堆栈转储)、`jinfo`(配置信息工具)、`jmap`(内存映射工具)等用于诊断和分析Java应用程序的性能问题。 5. **应用部署**:`appletviewer`用于本地测试...

    java程序开发工具集的使用共1页.pdf.zip

    8. **JDK的其他工具**:如jconsole、jps、jinfo、jmap等,它们分别用于监控Java进程、查看Java进程信息、获取配置信息、映射内存等,都是Java开发者日常调试和优化时的得力助手。 9. **IDE集成**:虽然JDK自带的...

Global site tag (gtag.js) - Google Analytics