代码编织梦想

今天报警发现一个服务器内存过大,经排查发现是java应用导致。
通过jps获取到java进程的pid(ps,top都可以)

[root@api00 ~]# jps
21765 Jps
19493 api.jar

想使用jcmd和jstack分析下进程状态,没想到执行报错了

[root@api00 ~]#  jcmd 19493 GC.class_histogram
19493:
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
	at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
	at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
	at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208)
	at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147)
	at sun.tools.jcmd.JCmd.main(JCmd.java:131)
[root@api00 ~]#   jstack 19493
11161: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

检查发现java应用是由特定用户robot启动的,不是root启动的,jstack需要使用与进程一致的用户才能执行,通过ps可以看到启动项目的用户。
第一列就是启动用户

[root@api00 ~]#   ps -ef |grep java
robot    19493     1 99 13:39 ?        01:14:49 java  -jar api.jar
root     22352 19925  0 14:21 pts/0    00:00:00 grep --color=auto java

解决

切换到robot用户,再robot用户下执行

[root@api00 ~]#   su - robot
Last login: Wed Apr 14 14:23:55 CST 2021 on pts/0
[robot@api00 ~]$ jstack 19493
2021-04-14 14:24:49
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode):

"Attach Listener" #406 daemon prio=9 os_prio=0 tid=0x00007fd138003000 nid=0x57ff waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"AsyncResolver-bootstrap-executor-0" #405 daemon prio=5 os_prio=0 tid=0x00007fd0f001e000 nid=0x4fec waiting on condition [0x00007fd005196000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000682a6c4a8> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)


命令正常执行
再使用jcmd和jstack时,要注意需要使用和java进程一致的用户才能执行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43931358/article/details/115697439

ue4 引擎 package 可执行文件过程中碰到fatal error的常见解决方法-爱代码爱编程

一般在Editor里面做Package的过程中,经常会碰到一些红色的fatal error. 如果是源码中明显错误,可以直接看到。 本文的目的在于:帮助大家解决当Editor里面没有具体描述源码中错误来源的情况下,如何定位错误,修正错误,只是一些经验tips的集合,并不是完整的方法论。如果有不当之处请大家在评论中指出,谢谢! 1 UnrealBu

java 工具(jmap,jstack)在linux上的源码分析(二)信号处理_test_touch的博客-爱代码爱编程

当java虚拟机启动的时候,会启动很多内部的线程,这些线程主要在thread.cpp里的create_vm方法体里实现 而在thread.cpp里主要起了2个线程来处理信号相关的 JvmtiExport::enter_live_phase(); // Signal Dispatcher needs to be started before VMInit

记一次排查线上生产cpu线程问题-爱代码爱编程

记一次排查线上生产cpu线程问题 问题发生排查步骤结果优化方法 问题发生 一天突然发现监控大屏cpu闲置率在80%左右,感觉不是很正常,现在需求不是很多,为什么cpu闲置率这么低,一般情况为95%以上,为

jstack遇到Unable to open socket file……-爱代码爱编程

精选30+云产品,助力企业轻松上云!>>> 大家使用jstack的时候偶尔会遇到这样的异常Unable to open socket file…… 下面我们依据openjdk11的code进行分析。 从错误入手 Unable to open socket file这个错误是jstack本身报的,算是一个客户端行为。

jmap,jstack等 出现Unable to open socket file: target process not responding or HotSpot VM not loaded-爱代码爱编程

现象: 排查内存溢出时,执行jmap命令报: 1、Unable to open socket file: target process not responding or HotSpot VM not loaded 根据提示加-F,结果如下 Dumping heap to dump.bin ... Exception in thread"mai