最新在Centos 7.6上起了一个新的Jboss,并在其中起了我们的server,但是在使用arthas的过程中发现一个问题。

[root@tmsprod4 ~]# java -jar arthas-boot.jar

[INFO] arthas-boot version: 3.1.1

[INFO] Can not find java process. Try to pass in command line.

Please select an available pid.

运行arthas的时候报错,找不到Java进程,但是通过 ps -ef | grep java发现:

image.png

有很多Java进程,然后通过Jps命令去列出Java进程的时候:

[root@tmsuat1 ~]# jps

30053 Jps

确实找不到Java进程,这是为什么?后来通过查询资料才知道,Linux系统下java进程启动的时候,会在/tmp/hsperfdata_root/目录下创建一个以Java进程id命名的文件,并在其中记录jvm等相关信息,运行Jps命令的时候,会访问该目录下的文件,从而输出Java进程,于是就到/tmp/hsperfdata_root/这个目录下查看了一下:

[root@tmsuat1 ~]# cd /tmp/hsperfdata_root/

[root@tmsuat1 hsperfdata_root]# ls

[root@tmsuat1 hsperfdata_root]# ls -al

total 8

drwxr-xr-x 2 root root 4096 Oct 31 20:51 .

drwxrwxrwt. 10 root root 4096 Oct 31 03:13 ..

[root@tmsuat1 hsperfdata_root]#

果然没有任何文件,这也就解释了为什么运行arthas会报Can not find java process,也解释了为什么Jps找不到Java进程的原因。于是基于这个发现查询为什么在Centos7下启动Java进程不向/tmp/hsperfdata_root/写入进程信息。查到的原因是Jboss是通过建立service启动的,而在Centos7下是通过systemctl启动service的,并在/usr/lib/systemd/system新建一个脚本:

[Unit]

Description=jbossapi

[Service]

Type=forking

PIDFile=/run/jboss-as/jboss-as-domain.pid

EnvironmentFile=-/etc/jboss-as/jboss-as-domain.conf

ExecStart=/jboss-eap-6.4/bin/init.d/jboss-as-domain.sh start

ExecReload=/jboss-eap-6.4/bin/init.d/jboss-as-domain.sh restart

ExecStop=/jboss-eap-6.4/bin/init.d/jboss-as-domain.sh stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

而其中的privateTmp这个属性正是原因所在,在centos7下面/tmp这个目录权限是777,任何人都可以查看,centos7认为这样不安全,容易泄露信息,于是官方启动脚本里就有PrivateTmp=true这么一句,这样一来Jboss启动后,就不会把相关信息写入/tmp目录里,也就造成jps无法看到java进程了。将该句从脚本中去除,并重启service既可以通过jps查看Java进程了。

java 进程消失_Java进程诡异消失问题相关推荐

  1. java 进程描述_java 进程和线程

    什么是进程,什么是线程? 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位. 线程:是进程的一个执行单元,是进程内科调度实体.比进程更小的独立运 ...

  2. java进程线程_Java进程线程笔记

    什么是并行和并发? 并发和并行是即相似又有区别:(微观) 并行:指两个或多个事件在同一时刻发生: 强调的是时间点. 并发:指两个或多个事件在同一时间段内发生: 强调的是时间段. 进程和线程的区别? 进 ...

  3. mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查

    一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...

  4. java共享内存_Java进程通信之映像文件共享内存

    Java进程通信之映像文件共享内存 1. 共享内存 vs 进程通信 对UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种.但windows实际上只有影像文件共享内存一种. 而说到进程通信 ...

  5. java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程

    synchronized(someObject){ //对象锁 } 一.对象锁 someObject 的使用说明: 1.对象锁的返还. 当synchronize()语句执行完成. 当synchroni ...

  6. java服务进程名_java设置进程名称 如何修改java程序的进程名

    如何修改java程序的进程名 把javaw.exe改名 同样的,你把java.exe改名,比如改成 myjava.exe 启动程序的时候 myjava your_class 这样进程就是myjava那 ...

  7. java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

    <尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...

  8. java的进程和线程_java进程和线程区别与不同

    java进程和线程区别与不同. 一.定义 1.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位. 2.线程是进程的一个实体,是CPU调度和分派的基本 ...

  9. Java 9中的进程处理

    一直以来,用Java管理操作系统进程都是一项艰巨的任务. 这样做的原因是可用的工具和API较差. 老实说,这并非没有道理:Java并非出于此目的. 如果要管理OS进程,则可以使用所需的Shell,Pe ...

最新文章

  1. 工业缺陷检测比赛Top3方案
  2. python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...
  3. Django学习手册 - ORM数据类型
  4. delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
  5. Fresco简单的使用—SimpleDraweeView
  6. 二叉树的构建及各种遍历回顾
  7. TwinCAT3入门教程4-伺服常用功能程序实现
  8. CSS定位中绝对定位和固定定位(重点)
  9. 有名管道与无名管道之间的区别
  10. js使用canvas画布画太极图案
  11. 电磁场与电磁波 面电流和体电流磁感应强度的计算
  12. kafka安装和部署
  13. 【阿里云IoT+YF3300】7.物联网设备表达式运算
  14. 关于芯片寄存器地址的理解
  15. React 函数式组件缓存原理
  16. 【MySQL】数据类型
  17. 算法题 子数组之和为零
  18. 结对作业——WordCount进阶版
  19. linux 系统修复模式
  20. 鼠标DPI和液晶显示器分辨率的关系

热门文章

  1. 模板模式(template)解析例子
  2. Linux 创建用户分配文件夹权限
  3. 原码,反码,补码,移码的概念以及各自的用途和优点
  4. Hello Shell
  5. Docker 学习笔记之二
  6. 杭电1019 Least Common Multiple(已解决)
  7. 一个简单的例子看java线程机制
  8. linux 物理内存统计,说说free命令  + Linux可用内存统计方法
  9. 贵州二本好的计算机专业,官方支持贵州大学创建双一流大学,贵州唯一的211,二本也有机会...
  10. pdo mysql防注入_Php中用PDO查询Mysql来避免SQL注入风险的方法