You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查Linux上Tomcat进程中监听端口对应的Java线程?

手动排查Tomcat中未配置监听端口的步骤

1. 确认进程归属

先确认可疑端口对应的PID(比如50384、51139)是否为目标Tomcat实例:

ps -ef | grep <PID>

输出会显示Tomcat的启动路径、运行用户等信息,可确认是否为你部署的Tomcat进程。

2. 定位监听端口的套接字信息

用lsof工具获取端口对应的文件描述符与inode,以端口37917、PID50384为例:

lsof -i tcp:37917 -p 50384

重点关注输出里的两列:

  • FD:套接字的文件描述符,格式类似3u
  • NODE:套接字的inode编号,比如123456

3. 找到持有套接字的线程

方法一:通过/proc文件系统遍历线程

遍历目标进程的所有线程,查找持有对应inode的线程ID:

# 替换<PID>和<INODE>为实际值
for tid in $(ls /proc/<PID>/task); do
  ls -l /proc/<PID>/task/$tid/fd | grep -q "socket:\[<INODE>\]"
  if [ $? -eq 0 ]; then
    echo "持有该端口的线程ID: $tid"
  fi
done

方法二:用jstack匹配线程栈

  1. 生成目标进程的线程栈文件:
jstack <PID> > jstack_<PID>.txt
  1. 将找到的十进制线程ID转为十六进制:
printf "%x\n" <TID>
  1. 在jstack文件中搜索nid=0x<十六进制值>,即可定位到对应的线程栈信息。

4. 从线程栈定位应用代码

找到目标线程的栈后,查看调用链中靠近栈顶的自定义类,比如:

"Thread-10" #123 daemon prio=5 os_prio=0 tid=0x00007f9e18001000 nid=0x3456 runnable [0x00007f9e0cfff000]
   java.lang.Thread.State: RUNNABLE
        at java.net.PlainSocketImpl.accept0(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:409)
        at java.net.ServerSocket.implAccept(ServerSocket.java:545)
        at java.net.ServerSocket.accept(ServerSocket.java:513)
        at com.example.myapp.internal.HttpServer.run(HttpServer.java:78)
        at java.lang.Thread.run(Thread.java:748)

这里的com.example.myapp.internal.HttpServer.run就是开启监听端口的代码,对应你的某个部署应用。

备选:用VisualVM重新排查

如果想再尝试VisualVM,先给Tomcat配置JMX参数,修改catalina.sh添加:

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.rmi.port=9000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=10.100.0.188"

重启Tomcat后,用VisualVM连接该主机的9000端口:

  • 切换到MBean标签,展开java.net > ServerSocket,查看各个实例的LocalPort属性,找到对应端口后查看关联的线程信息
  • 切换到线程标签,根据线程ID找到对应线程,查看栈信息定位代码

内容的提问来源于stack exchange,提问作者cyberbrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:54:23