问题标签 [jstack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jstack - 无法使用 Jstack 进行线程转储。
我想对我的 java - Jmeter 机器进行线程转储。在我的 Jmeter 机器中,我可以看到许多线程在测试计时后没有关闭和卡住。为了调试更多,我尝试进行线程转储(使用“jstack -PID>>Fileae.txt”命令)。但是此命令在 24 小时后仍在运行,尽管这创建了一个空文本文件。为什么我无法获取该 java 进程的线程转储。
java-8 - Java 8u20 核心转储(线程转储缺少堆栈跟踪)
我最近使用jvisualvm和jstack分析了一个 Java 8u20 的 tomcat 核心转储。对于大多数线程,我可以看到完整的堆栈跟踪,例如
但是对于当前线程(导致核心转储的线程)没有堆栈跟踪,我所看到的只是:
我发现以下解释IN_JAVA
:
NEW
: 刚启动,即正在初始化。IN_NATIVE
: 在本机代码中运行。IN_NATIVE_TRANS
: 对应的过渡状态。IN_VM
: 在虚拟机中运行。IN_VM_TRANS
: 对应的过渡状态。IN_JAVA
: 在 Java 或存根代码中运行。BLOCKED
: 在 vm 中被阻止。BLOCKED_TRANS
: 对应的过渡状态。
日志显示了从 java 调用 VM 本机代码的he_err
方法,但我对 java 端堆栈的其余部分感兴趣。
任何关于为什么会这样的想法将不胜感激!
java - Java - 为什么 jstack 不能在一个紧密的循环中工作
我注意到当代码处于紧密循环中时 jstack 不起作用。
例如在这段代码中:
如果您运行 jstack,您会收到以下消息:
无法打开套接字文件:目标进程没有响应或HotSpot VM未加载当目标进程没有响应时可以使用-F选项
只要您允许代码“呼吸”,例如通过每隔几千次迭代添加一个 System.out,它就可以正常工作。
请注意,如果您想从 jmc 运行 jconsole 或飞行记录器,这也是一样的。
我想了解为什么会这样,以及是否有什么我可以做的,因为我想描述一个紧密的循环。
aem - jStack的输出
我们在 Windows 机器上使用 Adobe AEM。我们的 Author 实例变得非常慢,为了调查同样的问题,我们尝试使用命令 jstack.exe pid > output file 进行线程转储
问题是这个命令的输出并不总是相同的。下面是获得的两种不同的输出。
这个几乎没有提供任何关于哪个线程被阻塞的信息
下面是第二个输出
想了解为什么 2 个不同的输出。此外,第二个输出在线程转储分析器等工具中提供了非常描述性的摘要。
java - jstack 是否停止在更新的 JDK8 版本上工作?
我惊讶地发现,最近 jstack 以某种方式停止了在更新的 JDK 8 上的工作。我不确定这发生在哪个版本上,但我确实得到了:
我确定 PID 是正确的,我什至尝试了-F
似乎阻止 jstack 的模式,我等了很多分钟,它似乎根本没有响应。
如果有人可以提供一种替代方法来生成调查死锁等所需的线程转储,我将非常愿意尝试它们。
附加系统信息
java - removeAll() 处的线程转储
我有一个按钮可以删除现有的 JPanel 并添加新的 JPanel。但是,当我按下该按钮时,我的程序将挂起。我使用 jstack 跟踪并发现程序卡在 removeAll()
这些是相关的线程转储:
我对分析线程转储的知识有限,但我做了一些研究。
经过locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock)
这是否意味着 AWT-EventQueue-0 持有这些组件?如果是,那么为什么 AWT-EventQueue-0 不删除该组件,因为它“拥有”该组件并处于可运行状态?谢谢 !
java - 为什么在 Windows 上运行 jstack 会出现“无法附加到 64 位进程”错误?
我试过命令
jstack -l <pid>
并得到以下错误 -
然后我尝试了这个命令 -
jstack -F <pid>
并得到这个错误 -
如何在 Windows 上成功运行 jstack?更具体地说,我正在运行 Windows 7。
java - 为什么 /tmp/.java_pid 时 jstack 不工作套接字文件已被删除
通常,我使用 jstack 来检查 java 进程是否正常工作。虽然我发现,当/tmp/java_pid<num>
(num是java进程的pid)socket文件被删除时,jstack将无法工作。像这样:
(PS.我不想用“-F”,可能还有其他问题)
有没有办法改变套接字文件的位置(不是/tmp)?还是在发现不存在时再次生成套接字文件?现在我所做的是再次重新启动 java 进程,这是一个非常糟糕的解决方案。
谢谢!
java - Java应用程序cpu负载过高的解决方法
今天发现我的服务器cpu负载太高,服务器只是运行一个Java应用。
下面是我的操作步骤。
我使用
top
命令来查找应用程序的 pid。PID 为 25713。我使用
top -H -p 25713
命令找到了一些使用最多 cpu 的 pid。比如25719 tomcat 20 0 10.6g 1.5g 13m R 97.8 4.7 314:35.22 java
。我使用
jstack -F 25713
命令打印转储信息。例如"Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477 runnable
我从转储文件中搜索了 pid。然后我发现使用cpu最多的pids都像
"Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477 runnable
我使用
jstack
命令后,cpu就正常了!
以下是我的问题:
- 为什么
GC Threads
cpu负载太高。 - 为什么我使用
jstack
命令后cpu变得正常。
不止这一次,每一次。
这是一些正常的日志。2015-10-10T10:17:52.019+0800: 71128.973: [GC (Allocation Failure) 2015-10-10T10:17:52.019+0800: 71128.973: [ParNew: 309991K->206K(348416K), 0.0051145 secs] 616178K->306393K(1009920K), 0.0052406 secs] [Times: user=0.09 sys=0.00, real=0.01 secs]
当 CPU 过高时,GC 日志停留在 中[GC (Allocation Failure) 2015-10-10T10:18:10.564+0800: 71147.518: [ParNew:
,没有其他日志。
当我执行jstack
命令时,打印日志
java - java应用程序装死。Jstack可以使应用程序恢复吗?
今天发现我的应用程序无法访问,然后登录我的服务器,发现应用程序的线程正常,但是CPU负载太高。
然后,我想使用jstack
命令。但是它指出了need -F option
。现在我发现GC日志留在了[GC (Allocation Failure) 2015-10-10T10:18:10.564+0800: 71147.518: [ParNew:
,并且没有其他日志。
然后,我使用jstack -F
命令。奇怪的事情发生了。CPU正常了,我的服务器也正常了,GC日志也正常了,第一行是[GC (Allocation Failure) 2015-10-10T10:17:50.757+0800: 53501.137: [ParNew: 210022K->245K(235968K), 369.6907808 secs] 400188K->1
90410K(1022400K), 369.6909604 secs] [Times: user=3475.15 sys=11.69, real=369.63 secs]
。而jstack的结果的可运行线程都是GC线程,比如"Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x00007f5f10021800 nid=0x6477 runnable
这是我的 JAVA_OPTIONS
-server -Dfile.encoding=UTF-8 \ -Xms2g -Xmx2g -Xmn512m \ -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 \ -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction= 75 \ -XX:+PrintGCDateStamps -verbose:gc -XX:+PrintGCDetails -Xloggc:/data/logs/gc-skynetlog_web.log \ -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M \ -XX :+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/dump_skynetlog_web.hprof