I. 查看端口占用

1.1 查看占用

1
ss -lntup | grep :端口号

输出示例:

1
tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=3576623,fd=44)) 

服务器上有一个 Java 应用,正在监听所有网卡的 TCP 8080 端口,最大允许 50 个连接排队等待接入,目前没有连接积压。

参数说明:

  • tcp 协议类型:UCP/TCP

  • LISTEN 监听状态:LISTEN(正在监听端口<服务端>),ESTAB(已建立连接),TIME-WAIT(连接关闭等待),CLOSE-WAIT(对端已关闭)

  • 0 接收队列(Recv-Q):表示当前等待被应用读取的数据量(字节)。对监听端口来说,一般是 0,表示没有积压请求。

  • 50 发送队列 / 等待连接队列(Send-Q):对于 LISTEN 状态,这个值代表内核最多允许 50 个连接请求排队等待这个 Java 服务处理(accept)。

  • *:8080 本地监听地址:* 监听所有 IPv4 地址(所有网卡),:8080 监听 8080 端口(同 0.0.0.0:8080 )。

  • *:* 对端地址(远端):对 LISTEN 状态来说,没有具体客户端连接, *:* 表示“任何来源的任意端口”。

  • users:(("java",pid=3576623,fd=44)) 哪个程序占用了这个端口:java 进程名(JVM),pid=3576623 进程 ID,fd=44 文件描述符。

1.2 确认服务

1.使用 ps 查看具体服务名(推荐)

1
ps -fp 3576623

或者:

1
jcmd 3576623 VM.command_line

可以直接看到启动参数、jar 包路径。

2.结合 systemd 查服务名

1
sudo systemctl status <PID>