********************************************
关于jstack命令执行失败问题
[root@localhost ~]# jstack 93875
93875: 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
********************************************
【分析】
从问题现象看,提示jstack命令执行失败,建议通过-F强制获取。
考虑以下方面:
1、执行jstack命令的jdk版本与目标进程的jdk版本是否一致?
2、是否在当前进程owner用户下执行?
>>>核对jdk版本是一致,一般os配置java_home并配置path的的话,jdk版本是一致的;
>>>核对进程owner用户和当前执行jstack用户是否一致,结果是:不一致。
【解决】
切换用户到当前进程owner用户下,执行jstack,命令成功。
/////////////begin///////////
[root@localhost ~]# su - jvmuser
Last login: Wed Nov 4 14:09:13 CST 2020 on pts/1
[jvmuser@localhost ~]$ jstack 93875
2020-12-08 11:17:00
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.111-b14 mixed mode):
"Attach Listener" #220147 daemon prio=9 os_prio=0 tid=0x00007f4f3c001000 nid=0x10cf4 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"XMemcached-HeartBeatPool[MemcachedClient-0]-216919" #220146 daemon prio=5 os_prio=0 tid=0x00007f4f0002b800 nid=0x10cc1 waiting on condition [0x00007f4f201d6000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000ba19ec00> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
/////////////end///////////////
【小结】
1、执行jstack命令需要在当前用户下执行;
注意:通过jinfo <pid> |grep user.name,查看进程是哪个用户启动的;
2、执行jstack的jdk版本建议与正在运行的JVM的jdk版本一致,至少前者高于后者;
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
分享到:
相关推荐
抓取jstack方法及解决system用户执行jstack命令权限问题, 打开cmd窗口,输入命令 jstack -l 49824>>C:/error01.txt 其中49824为tomcat8.0 的pid ; error01.txt 这个可以自己取名字 多输出几份jstack 文件,做比对...
使用 jstack 定位分析 CPU 消耗问题 在实际生产环境中,CPU 占用率过高的问题经常会出现,特别是在高并发情况下。使用 jstack 工具可以帮助我们快速定位 CPU 消耗问题的根源。本文将详细介绍使用 jstack 工具定位...
`jstack`命令是Java开发中用于诊断线程堆栈信息的重要工具,它可以帮助开发者了解Java应用程序的线程状态,包括运行、等待、阻塞等,以及是否存在死锁等问题。当遇到性能问题或者线程卡住不前时,`jstack`能提供关键...
在示例中,通过一个bash脚本可以自动化地对多个Java进程执行jstack命令,收集输出到指定的日志文件中。脚本的主要步骤包括: 1. 获取所有名为java的进程的PID。 2. 对每个PID执行jstack命令,并将输出重定向到日志...
Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...
通过执行jstack命令,我们可以获取到以下关键信息: 1. **线程状态**:jstack会列出所有活动线程及其当前的状态,包括运行(RUNNABLE)、等待(WAITING)、阻塞(BLOCKED)等。这有助于我们识别哪些线程可能在消耗...
Kubernetes 应用 Java 程序无法使用 jmap, jstack 的...总结:本文解决了 Kubernetes 环境中 Java 程序无法使用 jmap 和 jstack 命令的解决方案,通过修改 Dockerfile,使用 tini 进行 Java 程序的启动,解决了问题。
描述中提到的“IBM出品,用来分析jstack pid 打印的信息”,表明这个工具是IBM开发的,它的主要功能是解析`jstack`命令输出的结果。`jstack`是Java标准工具之一,它用于打印Java虚拟机(JVM)中线程的堆栈跟踪信息,...
jstack 分析工具
利用`JStack`,开发人员能够快速定位多线程问题,并深入理解程序的行为。无论是处理死锁还是监控线程状态,`JStack`都是不可多得的好帮手。在日常开发工作中,掌握`JStack`的使用技巧对于提高代码质量和程序稳定性...
jmap、jstack、jstat组合使用定位jvm问题
例如,使用 ps、top、printf、jstack、grep 等命令来找出某个 Java 进程中最耗费 CPU 的 Java 线程并定位堆栈信息。 例如:root@ubuntu:/ ps -ef | grep mrf-center | grep -v grep root 21711 1 1 14:47 pts/3 00:...
本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...
windows系统jstack自动抓取脚本
在`8508.jstack2.log`文件中,我们可以找到所有活动线程的状态,包括它们当前正在执行的方法、持有或等待的锁等信息。 首先,我们需要找出所有处于“WAITING”或“TIMED_WAITING”状态且持有或等待特定锁的线程。...
在Windows环境下,如果执行jps无结果,可能是由于权限问题,需要确保当前用户对 `%TMP%\hsperfdata_${user}` 目录有读写权限。 2. **jmap**: 这个命令用于获取Java进程的内存使用情况。例如,`jmap -heap [进程ID]`...
自动抓取jstack
Broken pipe产生的原因通常是当管道读端没有在读,而管道的写端继续有线程在写,就会造成管道中断。(由于管道是单向通信的) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。
用jstack分析CPU占用率高的原因 1 top -H -p pid 2 linux printf命令将10进制转换为16进制 3在jstack中找到相应的堆栈信息jstack pid grep 'nid' -C5 –color
一旦获取到进程的PID,可以打开命令提示符(CMD)并输入命令“jstack PID”来执行jstack工具。这里,PID需要替换为你实际的进程标识符。执行此命令后,jstack会在控制台输出当前Java进程的线程堆栈跟踪信息。输出...