1.问题
某台服务器出现假死的现象,服务进程在,但是就是不工作。于是想定位下,先看了下服务器本身的状态都是OK的,然后看下服务的状态,先执行如下的命令,发现服务是存在的,如下:
执行jps -ml输出如下:
然后执行jstack 2276,报出如下的错误:
2276: 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
2.解决
~ jstack 13179 | more
2019-06-13 17:15:44
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.60-b23 mixed mode):
"Attach Listener" #137 daemon prio=9 os_prio=0 tid=0x00002b7b64001000 nid=0x3db4 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Windows IOHub Watcher for IOHub#1: Selector[keys:0, gen:0] / Computer.threadPoolForRemoting [#4]" #90 daemon prio=5 os_prio=0 tid=0x00002b7bc00f7800 nid=0x340c in Object.wait() [0x00002b7c
1c402000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.jenkinsci.remoting.protocol.IOHub$IOHubSelectorWatcher.run(IOHub.java:549)
- locked <0x00000007a8e31928> (a java.lang.Object)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
"IOHub#1: Selector[keys:0, gen:0] / Computer.threadPoolForRemoting [#3]" #89 daemon prio=5 os_prio=0 tid=0x00002b7bc00f6000 nid=0x340b runnable [0x00002b7c1cf0d000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
...........................
- 然后再通过 jstat -gcutil pid 时间间隔(ms) 查看 jc 信息
jstat -gcutil 13179 1000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
99.95 0.00 49.14 14.96 91.97 84.24 10 0.444 3 0.317 0.761
.........
其中: S0:年轻代第一个幸存区(survivor)使用容量占用百分比
S1:年轻代第二个幸存区(survivor)使用容量占用百分比
E:年轻代伊甸园区(eden)使用容量占用百分比
O:老年代使用容量占用百分比
P:perm代使用容量占用百分比(JDK7-)
M:MetaSpace元空间使用容量占用百分比(JDK8+)
CCS:压缩使用比例
YGC:从应用程序启动到当前采样时年轻代gc的次数
YGCT:从应用程序启动到当前采样时年轻代gc的时间
FGC:从应用程序启动到当前采样时老年代gc的次数
FGCT:从应用程序启动到当前采样时老年代gc的时间
GCT:从应用程序启动到当前采样时gc总耗时
3.结论
jstack需要使用与进程一致的用户才能执行