来自Linux-Java线程转储的套接字信息
作者:互联网
在分析性能问题时,我每5秒进行一次连续线程转储,然后使用武士线程转储分析器进行分析.注意,许多线程处于可运行状态,并且在所有情况下,堆栈堆栈下面的内容连续不断.但是我找不到他们正在与哪个主机通信.我尝试使用命令ss -t -a,观察ss -tp和netstat -A inet -p,但是无法将其结果与线程相关联.任何想法?提前致谢.
Thread dump 2/5 "TP-Processor125" prio=5 tid=0x25756 nid=0x649c RUNNABLE (JNI Native Code) - stats: cpu=828 blk=-1 wait=-1 java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:628)
at org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:566)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:693)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:745) Locked synchronizers: count = 0
解决方法:
nid实际上是底层操作系统的进程/线程ID(至少对于Linux是这样),尽管使用十六进制表示法.转换为十进制pid并使用
lsof -p pid |grep -Ei 'tcp|socket'
了解有关所用套接字连接的更多信息.但是,事实证明,所有套接字都是由主线程打开的,在这种情况下,子线程仅继承几个(很多),因此可能很难看到它在哪里连接了哪个线程.
如果lsof没有显示主进程的线程(似乎确实没有显示),则您可能不得不解决/ proc /< pid> / fd.
标签:sockets,thread-dump,linux,java 来源: https://codeday.me/bug/20191119/2034354.html