系统相关
首页 > 系统相关> > 来自Linux-Java线程转储的套接字信息

来自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