Jps无法查看运行程序进程

2018-05-30 11:49

出现情况:程序正常运行后,jps使用也正常,间隔一段时间后jps无法查看Java相关进程了

jps简介


先了解一下jps是什么?

jps:Java Virtual Machine Process Status Tool 用于查看本机Java相关进程的pid。

相关用法:

1
选项 
2
-q 仅输出VM标识符,不包括class name,jar name,arguments in main method 
3
-m 输出main method的参数 
4
-l 输出完全的包名,应用主类名,jar的完全路径名 
5
-v 输出jvm参数 
6
-V 输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 
7
-Joption 传递参数到vm,例如:-J-Xms48m

Linux中配置好Java的环境变量后,即可使用jps命令查看Java相关进程,上文所列举的是配套使用的参数。

在使用过程中,有可能会出现jps查看不了Java进程的情况。程序在运行,jps命令却看不到相关程序的进程。但用Linux的ps -aux相关命令却可以看到,问题出在哪里呢?

详细介绍可以看该文:http://trinea.iteye.com/blog/1196400

问题梳理


其实上述的文章已经指明了,小编在阅读的时候却没有过多的注意,导致在解决这个问题时走了不少弯路。

原因是:程序启动正常,运行正常,使用jps查看也是正常的。却在间隔了几分钟或者十几分钟之后,jps无法查看进程了。

发现了上述情况后,小编的第一反应,是不是系统相关的问题,而不是是不是程序配置出现了相关问题

因为此次出现的情况发生在新使用的腾讯云服务器中,而程序的配置是与之前阿里云上的配置一样的。同样的配置方式阿里云正常,腾讯云中就出问题了,所以没有怀疑相同的配置情况是否适合腾讯云上。

首先分析一下jps查看进程的方式:

Java程序启动后,会默认在系统的根目录下的/tmp文件夹中创建一个含当前用户名的hsperfdata_userName文件夹,同时在该文件夹中会创建以Java相关进程id为为文件名的文件。并在相对应的文件中存储jvm运行的相关信息。

jps就是读取hsperfdata_userName文件夹中文件的信息,并把读取到的信息输出到控制台展示。

重点:如果根目录下的/tmp文件被删除,或者说/tmp中的hsperfdata_userName文件夹被删除,那jps命令是查看不了Java相关程序的进程的。

因此,出现jps无法查看已经启动了的相关Java进程的原因就是/tmp文件夹中的hsperfdata_userName被删除,或者无访问权限。

问题排查


如果有遇到相关问题,第一时间查看根目录下/tmp文件夹中的信息。

原因找到了,那为什么会出现/tmp中的信息被删除呢?

  • 启动的某个程序出现问题,把/tmp中的信息全部删除
  • Linux系统自带的清除机制
  • /tmp中的磁盘满了,无法存储数据

针对可能出现的问题一一排查。

启动的某个程序出现了问题

将程序关闭,或者重新启动一下Linux机器,在不启动任何程序的情况下,/tmp目录中存放一些文件。隔一段时间再看看是否还存在。

Linux系统自带的清除机制

Linux作为服务器,通常来说启动之后是很少会关闭的。根目录下/tmp文件作为临时缓存存放的路径,在长时间的使用过程中是会不断的产生新文件。为了保证Linux的正常运行,同时又避免/tmp文件夹无限的增加导致硬盘无法存放。

Linux针对这中情况,做了一些定时清理的处理的设置。常用的可能定时删除临时目录的工具为crontab、redhat的tmpwatch、ubuntu的tmpreaper等等。通常会在/etc/目录下,可以看到类似cron.daily,cron.hourly,cron.monthly等文件夹,它们就是用来执行相关定时任务的。说明仅供参考,上文描述情况基于centOS6.5

注:不同的Linux版本存放位置会不一样,命名方式也会有差别,管理的入口也会不也一样,设计的原理确实一样的。可以根据详细的系统版本去查找,

/tmp中的磁盘满了,无法存储数据

用命令查看磁盘使用情况,free、du -h 等,发现还有很大的磁盘空间,排除了这种情况。

进过排查,发现是自己程序问题导致的,最后在使用另一种配置方式后,程序成功的运行在了腾讯云上。ps:在面对问题的时候,怀疑自己出错可能也是一种解决方式。

小结


通常来说,遇到了问题,就是看到了进步的方向。解决问题的过程中,就是在不断的进步。

经验丰富的对应面就是,遇到了非常多的问题。当你把遇到的问题处理掉了,并且可以好好的终结,你的经验也就丰富起来了。


标签: LinuxJava

License(CC)BY-NC-SA © 2017 — 2020 hadronw | Theme based on fzheng.me