性能文章>Java 虚拟机进程状态管理工具 jps 失效?吓尿了!>

Java 虚拟机进程状态管理工具 jps 失效?吓尿了!原创

736900

寒冬了,服务器资源也要节约这用。以前,我们一个人可以申请多个机器进行一些分布式的系统部署和测试,包括一些微服务方面的项目我们尽量的模拟多台机器的环境。但是现在,公司为了进一步节约成本开支,把一些机器进行了回收。所以后来在使用期间遇到了一些问题,用到了 JPS 命令,本文就给大家彻底的扯一扯这个命令的用法,和遇到的一些问题。

jps(Java Virtual Machine Process Status Tool)是 JDK 1.5 提供的一个显示当前所有 java 进程 pid 的命令。很多人会用,但是很多人在使用过程中可能遇到了一些奇葩问题。

jps 命令存放在 JAVA_HOME/bin/ 目录中,如果你的这个目录没有加入到 Path 中,使用这个命令时,可能会提示命令不存在,无法识别的问题。

jps 命令格式为:

image.png

常用的 option 参数有 5 个:

-q 只显示 pid,不显示 class 名称,jar 文件名和传递给 main 方法的参数

-m 输出传递给 main 方法的参数,在嵌入式 jvm 上可能是 null

-l 输出应用程序 main class 的完整 package 名或者应用程序的 jar 文件完整路径名

-v 输出传递给 JVM 的参数

-V 隐藏输出传递给 JVM 的参数

我们常用的是直接输入 jps,如果你忘记了怎么使用,可以使用 jps -help 命令查看帮助信息:

image.png

我们公司在节源后,资源共用,一些机器上部署了十几个应用。导致有的人程序访问不了,这个很简单的问题,jps 看下应用是否起来了。如果没有应用,看下日志,最终发现是端口被占用了。查看端口的命令,我们以后再说。

把 jps 命令给大家演示了之后,大家都会操作了。但是有些人发现,一些机器上根本就用不了 jps 命令。究其原因,有以下几种情况:

第一种情况就是,JAVA_HOME/bin/ 目录没加入 path 环境下。

第二种就是磁盘目录读写权限问题。jps、jconsole、jvisualvm 等工具的数据来源就是这个文件(/tmp/hsperfdata_userName/pid),userName 是用户名,所以当该文件不存在或是无法读取时就会出现 jps 无法查看该进程号。这种情况下,使用 ps -ef|grep java 命令能看到启动的 java 进程。

第三种情况就是 /tmp 目录被删除或是定期清理,也或者是磁盘已满等。

最后一种可能就是你的程序在启动时设置了 -Djava.io.tmpdir 参数。导致 java 进程信息文件存储地址被改变到其他位置了。

如果上面 4 情况你都没问题,那就找找自己项目的原因。

本文转载自微信公众号:业余草
作者:业余草

请先登录,再评论

暂无回复,快来写下第一个回复吧~

为你推荐

不起眼,但是足以让你有收获的JVM内存分析案例
分析 这个问题说白了,就是说有些int[]对象不知道是哪里来的,于是我拿他的例子跑了跑,好像还真有这么回事。点该 dump 文件详情,查看相关的 int[] 数组,点该对象的“被引用对象”,发现所
从一起GC血案谈到反射原理
前言 首先回答一下提问者的问题。这主要是由于存在大量反射而产生的临时类加载器和 ASM 临时生成的类,这些类会被保留在 Metaspace,一旦 Metaspace 即将满的时候,就会触发 Fu
关于内存溢出,咱再聊点有意思的?
概述 上篇文章讲了JVM在GC上的一个设计缺陷,揪出一个导致GC慢慢变长的JVM设计缺陷,可能有不少人还是没怎么看明白的,今天准备讲的大家应该都很容易看明白 本文其实很犹豫写不写,因为感觉没有
协助美团kafka团队定位到的一个JVM Crash问题
概述 有挺长一段时间没写技术文章了,正好这两天美团kafka团队有位小伙伴加了我微信,然后咨询了一个JVM crash的问题,大家对crash的问题都比较无奈,因为没有现场,信息量不多,碰到这类问题我
又发现一个导致JVM物理内存消耗大的Bug(已提交Patch)
概述 最近我们公司在帮一个客户查一个JVM的问题(JDK1.8.0_191-b12),发现一个系统老是被OS Kill掉,是内存泄露导致的。在查的过程中,阴差阳错地发现了JVM另外的一个Bug。这个B
JVM实战:优化我的IDEA GC
IDEA是个好东西,可以说是地球上最好的Java开发工具,但是偶尔也会卡顿,仔细想想IDEA也是Java开发的,会不会和GC有关,于是就有了接下来对IDEA的GC进行调优 IDEA默认JVM参数: -
不起眼,但是足以让你收获的JVM内存案例
今天的这个案例我觉得应该会让你涨姿势吧,不管你对JVM有多熟悉,看到这篇文章,应该还是会有点小惊讶的,不过我觉得这个案例我分享出来,是想表达不管多么奇怪的现象请一定要追究下去,会让你慢慢变得强大起来,
如何通过反射获得方法的真实参数名(以及扩展研究)
前段时间,在做一个小的工程时,遇到了需要通过反射获得方法真实参数名的场景,在这里我遇到了一些小小的问题,后来在部门老大的指导下,我解决了这个问题。通过解决这个问题,附带着我了解到了很多新的知识,我觉得