首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Linux-Java线程转储的套接字信息

来自Linux-Java线程转储的套接字信息
EN

Stack Overflow用户
提问于 2016-01-07 21:30:18
回答 2查看 1.6K关注 0票数 3

在分析性能问题时,我每隔5秒进行一次连续的线程转储,并使用武士线程转储分析器进行分析。请注意,许多线程都处于可运行状态,在所有情况下都会连续出现堆栈下面的转储。但我找不到他们在与哪台主机通信。我尝试使用命令ss -t -awatch ss -tpnetstat -A inet -p,但无法将它们的结果与线程相关联。有什么想法吗?提前谢谢。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2016-01-07 22:33:12

nid实际上是底层操作系统的进程/线程ID (至少对于Linux),尽管采用十六进制表示法。转换为十进制pid并使用

代码语言:javascript
复制
lsof -p pid |grep -Ei 'tcp|socket'

以了解有关所使用的套接字连接的更多信息。然而,结果可能是,所有套接字都是由主线程打开的,在这种情况下,子线程只继承几个(许多),因此可能很难看出它连接到了哪个线程。

如果lsof没有显示主进程的线程(看起来确实没有),那么您可能不得不检查一下/proc/<pid>/fd

票数 3
EN

Stack Overflow用户

发布于 2016-01-08 00:33:45

tid是Java级线程id,nid是本机线程id。在不同的操作系统上,nid实际上指的是somewhat confusing。我建议您使用诸如Visual VM之类的工具连接到您的应用程序,并记下应用程序的PID。获得PID后,请尝试执行以下命令:

代码语言:javascript
复制
sudo netstat -nlpt

这应该会给出如下内容(带有远程/本地地址、PID和程序名):

代码语言:javascript
复制
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1144/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      661/cupsd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      661/cupsd

这应该会告诉您Java程序打开了哪些连接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34656396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档