【问题标题】:finding out which ports a program/process ist listening to - lsof, netstat找出程序/进程正在侦听的端口 - lsof、netstat
【发布时间】:2015-03-18 21:08:25
【问题描述】:

在 Ubuntu 下,我有一个交互式程序,我怀疑它挂在侦听特定端口上,不知道是哪个。

它是一个 shell 脚本,它在最后一行调用 java 命令。

如何在“挂起”状态下轻松找出它正在侦听的端口?

我尝试将 lsof 放在命令前面,但是写出了一条巨大的路径,上面写着“lsof: path too long”

lsof -c java  ${JAVA_OPTS} -classpath "${SERVLET_API}:${JSP_API}:${OPENCMS_CLASSPATH}:${TOMCAT_CLASSPATH}:${OPENCMS_BASE}/classes" org.opencms.main.CmsShell -base="${OPENCMS_BASE}" "$@"

【问题讨论】:

  • 您可以尝试使用 netstat 而不是 lsof 来查看哪些端口正在监听连接。
  • 尝试查找您怀疑的程序的名称,例如 lsof -i -P | grep
  • 在端口监听不会导致挂起,但从端口读取会导致阻塞。
  • Java 的哪个版本?

标签: java shell ubuntu netstat lsof


【解决方案1】:

将其拆分为几个命令。首先使用java ... 启动您的应用程序。然后可以使用jps查看新Java进程的进程ID(jps应该和java在同一个文件夹中)。

现在您可以使用lsof -np <id> 获取文件描述符列表。

但是 Java 程序也可以在循环中挂起。要查看程序当前正在做什么,请使用jstackjconsole

【讨论】:

  • jstackPID 没有产生任何输出。 jstack -F PID 给出了一个堆栈跟踪,说 .NoSuchSymbolException: 找不到符号“gHotSpotVMTypes”
  • jconsole 无法连接到进程
  • @Krischu:回复jstack:确保为您的 Java 版本使用正确的程序版本。检查$JAVA_HOME 的值和readlink -f $(which java) 的输出
猜你喜欢
  • 2016-03-19
  • 2010-09-08
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2017-06-04
相关资源
最近更新 更多