Linux 根据端口找出 Java 程序
介绍
在 Linux 系统中,我们经常需要查找正在运行的进程中使用了哪些端口。特别是在开发和调试 Java 程序时,我们可能需要找到正在运行的 Java 程序所使用的端口号。本文将介绍如何使用 Linux 命令和工具来查找正在运行的 Java 程序,并根据端口号找出对应的进程。
查找端口对应的进程
使用 netstat
命令
netstat
命令是一个用于显示网络连接、路由表和网络接口等信息的实用工具。我们可以通过 netstat
命令来查找正在监听指定端口的进程。
下面是使用 netstat
命令查找端口对应的进程的示例:
$ netstat -tunlp | grep <port>
其中,-tunlp
参数用于显示 TCP、UDP 和 Unix 套接字的监听状态,grep
命令用于过滤出指定端口号对应的行。
使用 lsof
命令
lsof
命令用于列出当前系统中打开的文件和文件描述符。我们可以通过 lsof
命令来查找某个进程打开的所有文件和端口。
下面是使用 lsof
命令查找端口对应的进程的示例:
$ lsof -i :<port>
其中,-i :<port>
参数用于过滤出使用指定端口号的进程。
使用 jps
命令
jps
命令是 JDK 自带的一个工具,用于列出当前系统中正在运行的 Java 进程。我们可以通过 jps
命令来查找正在运行的 Java 程序的进程 ID。
下面是使用 jps
命令查找正在运行的 Java 程序的示例:
$ jps
jps
命令会列出所有正在运行的 Java 程序的进程 ID 和程序的主类名。
查找进程对应的 Java 程序
使用 ps
命令
ps
命令用于显示当前正在运行的进程。我们可以通过 ps
命令来查找某个进程对应的 Java 程序。
下面是使用 ps
命令查找进程对应的 Java 程序的示例:
$ ps -ef | grep <pid>
其中,-ef
参数用于显示所有进程的完整信息,grep
命令用于过滤出指定进程 ID 对应的行。
使用 jmap
命令
jmap
命令是 JDK 自带的一个工具,用于生成对应 Java 进程的内存转储快照。我们可以通过 jmap
命令来查找某个进程对应的 Java 程序的主类名。
下面是使用 jmap
命令查找进程对应的 Java 程序的示例:
$ jmap -dump:format=b,file=<dumpfile> <pid>
$ jmap -histo <pid>
jmap -dump
命令用于生成内存转储快照文件,-histo
命令用于显示堆中对象的统计信息。通过查看转储快照文件和堆统计信息,可以找到 Java 程序的主类名。
示例
假设我们有一个正在运行的 Java 程序,它监听了 8080 端口。我们想要找到该进程的进程 ID 和主类名。
首先,我们可以使用 netstat
命令来查找端口对应的进程:
$ netstat -tunlp | grep 8080
输出类似于:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12345