【问题标题】:Showing multiple java processes with different pids显示具有不同 pid 的多个 java 进程
【发布时间】:2020-06-23 10:41:51
【问题描述】:

我想用服务名称获取所有正在运行的端口,但有些端口名称是 java。

以下给定端口正在使用 ansible 获取。

ansible -m listen_ports_facts --user=username --become --ask-become-pass --tree portdir/ all

tcp : 8011 : java

tcp:8012:java

tcp:8013:java

我该怎么做?请提出相同的建议。

我已尝试使用 ps -aux | grep "PID" 发现有目录路径。

【问题讨论】:

    标签: linux ansible port pid netstat


    【解决方案1】:

    因为 Java 就像一个 VM,如果不了解 Java 进程本身,您将无法真正看到 Java 进程正在服务什么。通常,您运行带有参数的 Java VM - 例如 java -jar /path/to/my/program.jar 或在 Wildfly 等情况下。一些参数显示到 standalone 或任何其他的路径。这个参数可以给你一个提示,JavaVM 正在运行的是什么。但这并不容易以一般方式过滤。

    还有一些 Java 进程在同一个 PID 下打开多个端口(例如 Wildfly 打开端口以服务于 Java-Webcontainer 以及一些管理 Web UI 等)。

    因此,快速回答是 - 不 - 您通常无法通过检查端口来找出 Java VM 所服务的内容。但也许在 SpringBoot 的情况下,您可以将服务名称与 -jar <program>.jar 的参数值匹配,然后是服务的名称。此外 - 例如在 Tomcat 的情况下 - 没有 -jar 参数,而是像 java -cp ... -D..=.. org.apache.catalina.startup.Bootstrap .. 这样的类名 - 它向您显示这是一个 Tomcat(代号 Catalina)。我不确定是否有一种简单/准确的方法来识别类名参数...

    在某些情况下,这对您没有帮助 - 因为可能有多个端口,并且可能有一些 PID 服务于相同的<program>。要么你生活在那里(例如你说,它在端口 8011 上为 Wildfly 或 Tomcat 提供服务。这是通用的。

    如果您需要知道该端口上的内容 - 可以解析该程序的配置(这意味着您需要了解进程结构) - 例如,Tomcat 将其存储在 /webapps/ 下的 Webcontainers *。战争。而且因为它可能不止一个服务(战争)在那里运行,所以端口可能不是“一个”服务所独有的。

    如果您的 Java 进程始终使用相同的端口,您可以将此端口添加到 /etc/services 或在您的环境中使用 key=port, value=servicename 创建一个 dict 以静态映射端口-服务名映射。当端口服务名称不匹配时,您还可以添加警告。

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多