当前位置: 首页 > news >正文

进程 端口排查速查手册

#ps #ss #netstat #linux #运维

建议优先用 ss(更快、更现代),netstat 主要用于老系统兼容。

总览:什么时候用谁

  • ps:按“进程”为中心看信息(谁在跑、占用多少 CPU/内存、父子关系、线程…)。
  • ss:按“连接/端口”为中心看信息(谁在监听、连接状态、哪个进程占某端口)。推荐
  • netstat:老牌网络查看工具(net-tools 包)。很多新系统默认没装、功能被 ss / iproute2 替代。

ps:进程查看与筛选

常用姿势

# 全量进程(标准两种写法)
ps -ef
ps aux# 只看指定列 + 排序(CPU/内存热度排查常用)
ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head
ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%mem | head# 进程树(看父子关系/谁拉起了谁)
ps -eo pid,ppid,cmd --forest | less# 查看某个进程的详细信息
ps -p <PID> -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd# 看线程(TID/CPU 绑定核等)
ps -Lp <PID> -o pid,tid,psr,stat,%cpu,comm

典型筛选

# 按名字找
ps -ef | grep '[n]ginx'
ps aux | grep '[j]ava'# 查找最近启动的前 N 个进程(按启动时间逆序)
ps -eo pid,lstart,cmd --sort=lstart | tail -n 20

小贴士:

  • grep '[n]ginx' 写法可避免把 grep 自己匹配进去。
  • 结合 /proc/<PID> 能拿到更多:readlink -f /proc/<PID>/exe 看真正可执行文件路径;tr '\0' ' ' </proc/<PID>/cmdline 看完整启动参数。

ss:现代网络端口/连接工具(首选)

常用参数速记

  • -t TCP,-u UDP
  • -l 仅监听(Listening)
  • -a 所有(含非监听的已建立连接)
  • -n 不做域名/端口反解(更快、直出数字)
  • -p 显示进程(需 root)
  • -4 / -6 仅 IPv4 / IPv6
  • -s 汇总统计(状态总览)
  • state 过滤连接状态(listening/established/time-wait/close-wait…

一眼看服务在不在监听

# 所有监听中的 TCP/UDP 端口 + 进程
sudo ss -tulnp# 只看 TCP 监听
sudo ss -ltnp# 找指定端口(如 8080)
sudo ss -ltnp | grep ':8080 '

连接态分析

# 只看已建立的 TCP 连接
ss -tan state established# 统计汇总(各状态数量、TCP/UDP 概览)
ss -s

通过端口找进程

# 谁占了 80 端口?
sudo ss -ltnp | grep ':80 '
# 输出会含 pid=1234,fd=...,拿到 PID 后:
ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd

只看某进程相关的连接

# 方法1:粗筛(按进程名)
sudo ss -tanp | grep nginx# 方法2:按 PID 精确点
sudo ss -tanp | grep 'pid=1234,'

高级过滤(可选):
ss -tan '( sport = :22 or dport = :22 )'ss -tan state close-wait
某些 shell 里括号需要引号包起来;-p 需要 root 才能看到进程名。

注意:ss -K(尝试杀连接)在部分系统可用、且需 CAP_NET_ADMIN,一般不建议生产直接用。


netstat:经典工具(老系统/习惯党)

多数现代发行版默认不带,需要安装 net-tools。优点是大家都熟;缺点是速度慢、部分功能被替代。

常用

# 监听端口 + 进程
sudo netstat -tulpen# 全部 TCP 连接(含非监听)
sudo netstat -plant# 统计
netstat -s# 路由/网卡(现代替代命令见下)
netstat -rn     # => 推荐用:ip route
netstat -i      # => 推荐用:ip -s link

场景化解决方案

1)“端口被占用,我要知道是谁”

sudo ss -ltnp | grep ':8021 '
# 或(老法):
sudo netstat -tulpen | grep ':8021 '
# 拿到 PID 后
ps -p <PID> -o pid,ppid,user,etime,%cpu,%mem,cmd
readlink -f /proc/<PID>/exe

2)“我想从进程反查它开了哪些端口”

# 先拿 PID(例:nginx)
pidof nginx
# 再在 ss 里按 pid 过滤
sudo ss -tulnp | grep "pid=$(pidof nginx | awk '{print $1}')"

3)“连接很多,机器卡,我要快速概览”

ss -s                               # 汇总态
ss -tan state established | wc -l   # 已建立连接数
ss -tan state time-wait   | wc -l   # TIME_WAIT 数
ss -tan state close-wait  | wc -l   # CLOSE_WAIT(应用未及时 close)

4)“内网只监听 127.0.0.1/::1,服务外面连不上”

  • Local Address 若是 127.0.0.1:PORT / ::1:PORT,说明只绑定本地环回。

  • 修改服务配置改为 0.0.0.0/:: 或对应对外网卡地址,再重启服务。

  • 再用 ss -ltnp 确认 0.0.0.0:PORT/[::]:PORT

5)“看不到进程名/端口名全是英文名”

  • -nss -ltnp,避免反解域名/服务名。

  • sudo 才能看到 -p 的进程信息(否则显示 users:(("?",pid=...)) 或直接缺失)。

6)容器环境的小坑

  • 新版 Docker/Podman 常直接由 容器内进程监听宿主端口(NAT/iptables 转发);老版本 Docker 可能出现 docker-proxy

  • Podman/CRI-O 旁边你可能会看到 conmon 之类进程,但占端口的通常仍是容器内服务本体。

  • 看到 :::PORT 代表 IPv6 任意地址;很多工具会把 :::PORT 同时映射到 IPv4,注意防火墙策略一致性。


netstat ↔ ss 快速对照(常用)

目的netstatss(推荐)
监听端口 + 进程sudo netstat -tulpensudo ss -tulnp
所有 TCP 连接(含已建立)sudo netstat -plantsudo ss -tanp
只看监听中的 TCPsudo netstat -ltnpsudo ss -ltnp
统计汇总netstat -sss -s
路由表netstat -rnip route(替代)
网卡统计netstat -iip -s link(替代)

小结与建议

  1. 优先用 ssss -tulnp(监听端口)+ ss -tan state established(连接态)+ ss -s(总览)三板斧。
  2. 进程细节交给 psps -eo ... --sort 排热度、--forest 看树、-Lp 看线程。
  3. 需要进程名就加 sudo;看不懂名字就加 -n
  4. 容器/防火墙/IPv6 三件套最常见坑:确认绑定地址、确认宿主/容器网络模式、确认策略一致。

具体使用

ps

  1. ps -ef SysV 风格全量列表
root@xiaocai:/app/prometheus# ps -ef                      # SysV 风格全量列表
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 10:19 ?        00:00:06 /sbin/init splash
root           2       0  0 10:19 ?        00:00:00 [kthreadd]
root           3       2  0 10:19 ?        00:00:00 [pool_workqueue_release]
root           4       2  0 10:19 ?        00:00:00 [kworker/R-rcu_gp]
root           5       2  0 10:19 ?        00:00:00 [kworker/R-sync_wq]
root           6       2  0 10:19 ?        00:00:00 [kworker/R-kvfree_rcu_reclaim]
root           7       2  0 10:19 ?        00:00:00 [kworker/R-slub_flushwq]
root           8       2  0 10:19 ?        00:00:00 [kworker/R-netns]
root          11       2  0 10:19 ?        00:00:00 [kworker/0:0H-events_highpri]
root          12       2  0 10:19 ?        00:00:00 [kworker/u512:0-ipv6_addrconf]
root          13       2  0 10:19 ?        00:00:00 [kworker/R-mm_percpu_wq]
root          14       2  0 10:19 ?        00:00:00 [rcu_tasks_kthread]
root          15       2  0 10:19 ?        00:00:00 [rcu_tasks_rude_kthread]
root          16       2  0 10:19 ?        00:00:00 [rcu_tasks_trace_kthread]
root          17       2  0 10:19 ?        00:00:00 [ksoftirqd/0]
root          18       2  0 10:19 ?        00:00:05 [rcu_preempt]
  1. ps aux BSD 风格全量列表
root@xiaocai:/app/prometheus# ps aux                      # BSD 风格全量列表
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1  23372 14384 ?        Ss   10:19   0:06 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    10:19   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    10:19   0:00 [pool_workqueue_release]
root           4  0.0  0.0      0     0 ?        I<   10:19   0:00 [kworker/R-rcu_gp]
root           5  0.0  0.0      0     0 ?        I<   10:19   0:00 [kworker/R-sync_wq]
root           6  0.0  0.0      0     0 ?        I<   10:19   0:00 [kworker/R-kvfree_rcu_reclaim]
root           7  0.0  0.0      0     0 ?        I<   10:19   0:00 [kworker/R-slub_flushwq]
  1. ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head
root@xiaocai:/app/prometheus# ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | headPID    PPID USER     %CPU %MEM     ELAPSED CMD8357    6631 root      1.6  0.2    04:23:17 node_exporter20492       1 root      0.2  0.5       01:20 /usr/libexec/fwupd/fwupd2429    2099 xiaocai   0.2  3.4    04:42:06 /usr/bin/gnome-shell3216    1403 root      0.1  0.4    04:42:01 containerd --config /var/run/docker/containerd/containerd.toml838       1 avahi     0.1  0.0    04:42:20 avahi-daemon: running [xiaocai-2.local]20270       2 root      0.0  0.0       40:27 [kworker/0:1-events]1403       1 root      0.0  0.8    04:42:18 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock862       1 root      0.0  0.5    04:42:20 /usr/lib/snapd/snapd20331       2 root      0.0  0.0       18:33 [kworker/3:2-events]
  1. ps -eo pid,ppid,cmd --forest | less
root@xiaocai:/app/prometheus# ps -eo pid,ppid,cmd --forest | less     # 进程树(父子关系)PID    PPID CMD2       0 [kthreadd]3       2  \_ [pool_workqueue_release]4       2  \_ [kworker/R-rcu_gp]5       2  \_ [kworker/R-sync_wq]6       2  \_ [kworker/R-kvfree_rcu_reclaim]7       2  \_ [kworker/R-slub_flushwq]8       2  \_ [kworker/R-netns]11       2  \_ [kworker/0:0H-events_highpri]12       2  \_ [kworker/u512:0-ipv6_addrconf]13       2  \_ [kworker/R-mm_percpu_wq]14       2  \_ [rcu_tasks_kthread]15       2  \_ [rcu_tasks_rude_kthread]
  1. ps -p 8357 -o pid,ppid,user,lstart,etime,%cpu,%mem,cmd
root@xiaocai:/app/prometheus# ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | headPID    PPID USER     %CPU %MEM     ELAPSED CMD8357    6631 root      1.6  0.2    04:23:17 node_exporter20492       1 root      0.2  0.5       01:20 /usr/libexec/fwupd/fwupd2429    2099 xiaocai   0.2  3.4    04:42:06 /usr/bin/gnome-shell3216    1403 root      0.1  0.4    04:42:01 containerd --config /var/run/docker/containerd/containerd.toml838       1 avahi     0.1  0.0    04:42:20 avahi-daemon: running [xiaocai-2.local]20270       2 root      0.0  0.0       40:27 [kworker/0:1-events]1403       1 root      0.0  0.8    04:42:18 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock862       1 root      0.0  0.5    04:42:20 /usr/lib/snapd/snapd20331       2 root      0.0  0.0       18:33 [kworker/3:2-events]
root@xiaocai:/app/prometheus# ps -eo pid,ppid,cmd --forest | less     # 进程树(父子关系)
root@xiaocai:/app/prometheus# 
root@xiaocai:/app/prometheus# ps -p 8357 -o pid,ppid,user,lstart,etime,%cpu,%mem,cmdPID    PPID USER                      STARTED     ELAPSED %CPU %MEM CMD8357    6631 root     三 8月 27 10:38:41 2025   04:25:21  1.6  0.2 node_exporter

字段速懂

  • PID/PPID:进程/父进程 ID
  • %CPU/%MEM:瞬时占用比例(取样窗口,非累计)
  • STAT:进程状态(R 运行、S 休眠、D 不可中断、Z 僵尸、T 停止;带 + 表示前台)
  • ETIME/LSTART:运行时长 / 启动时间
  • CMD:完整启动命令

进阶技巧

  • 避免把 grep 自己匹配进去:ps -ef | grep '[n]ginx'
  • 查真实可执行文件与启动参数:
    readlink -f /proc/<PID>/exe tr '\0' ' ' < /proc/<PID>/cmdline
  • 快速找“最近启动”的服务:ps -eo pid,lstart,cmd --sort=lstart | tail -n 20

ss

基本参数

  • 协议:-t TCP,-u UDP
  • 过滤:-l 仅监听,-a 全部,state 指定状态
  • 解析:-n 不反解(快),-p 进程(需 root),-4/-6 IPv4/IPv6
  • 总览:-s 统计摘要

常用组合

  1. ss -tulnp 所有监听端口 + 进程
root@xiaocai:/app/prometheus# ss -tulnp
Netid            State             Recv-Q            Send-Q                       Local Address:Port                        Peer Address:Port            Process                                                             
udp              UNCONN            0                 0                               127.0.0.54:53                               0.0.0.0:*                users:(("systemd-resolve",pid=634,fd=16))                          
udp              UNCONN            0                 0                            127.0.0.53%lo:53                               0.0.0.0:*                users:(("systemd-resolve",pid=634,fd=14))                          
udp              UNCONN            0                 0                                  0.0.0.0:5353                             0.0.0.0:*                users:(("avahi-daemon",pid=838,fd=12))                             
udp              UNCONN            0                 0                                  0.0.0.0:50695                            0.0.0.0:*                users:(("avahi-daemon",pid=838,fd=14))                             
udp              UNCONN            0                 0                                     [::]:5353                                [::]:*                users:(("avahi-daemon",pid=838,fd=13))                             
udp              UNCONN            0                 0                                     [::]:43997                               [::]:*                users:(("avahi-daemon",pid=838,fd=15))                             
tcp              LISTEN            0                 4096                             127.0.0.1:631                              0.0.0.0:*                users:(("cupsd",pid=1253,fd=7))                                    
tcp              LISTEN            0                 128                              127.0.0.1:6010                             0.0.0.0:*                users:(("sshd",pid=6454,fd=7))                                     
tcp              LISTEN            0                 128                              127.0.0.1:6011                             0.0.0.0:*                users:(("sshd",pid=8367,fd=7))                                     
tcp              LISTEN            0                 4096                         127.0.0.53%lo:53                               0.0.0.0:*                users:(("systemd-resolve",pid=634,fd=15))                          
tcp              LISTEN            0                 4096                            127.0.0.54:53                               0.0.0.0:*                users:(("systemd-resolve",pid=634,fd=17))                          
tcp              LISTEN            0                 4096                                 [::1]:631                                 [::]:*                users:(("cupsd",pid=1253,fd=6))                                    
tcp              LISTEN            0                 128                                  [::1]:6011                                [::]:*                users:(("sshd",pid=8367,fd=5))                                     
tcp              LISTEN            0                 128                                  [::1]:6010                                [::]:*                users:(("sshd",pid=6454,fd=5))                                     
tcp              LISTEN            0                 4096                                     *:22                                     *:*                users:(("sshd",pid=1268,fd=3),("systemd",pid=1,fd=425))            
tcp              LISTEN            0                 4096                                     *:9100                                   *:*                users:(("node_exporter",pid=8357,fd=3))                            
tcp              LISTEN            0                 4096                                     *:2375                                   *:*                users:(("dockerd",pid=1403,fd=3)) 
  1. sudo ss -ltnp | grep ':9100 ’ 指定端口监听者
# ss -ltnp | grep ':9100 '
LISTEN 0      4096               *:9100            *:*    users:(("node_exporter",pid=8357,fd=3))
  1. ss -tan state established 已建立 TCP 连接
root@xiaocai:/app/prometheus# ss -tan state established
Recv-Q                      Send-Q                                                  Local Address:Port                                                   Peer Address:Port                      Process                      
0                           0                                                [::ffff:172.16.0.74]:22                                             [::ffff:172.16.0.60]:4269                                                   
0                           0                                                [::ffff:172.16.0.74]:22                                             [::ffff:172.16.0.60]:8504                                                   
0                           0                                                [::ffff:172.16.0.74]:9100                                           [::ffff:172.16.0.66]:55566                                                  
0                           0                                                [::ffff:172.16.0.74]:22                                             [::ffff:172.16.0.60]:8637                                                   
0                           52                                               [::ffff:172.16.0.74]:22                                             [::ffff:172.16.0.60]:3325 
  1. ss -s 总览:各状态计数、TCP 内核参数摘要
root@xiaocai:/app/prometheus# ss -s
Total: 824
TCP:   16 (estab 5, closed 0, orphaned 0, timewait 0)Transport Total     IP        IPv6
RAW	  0         0         0        
UDP	  7         5         2        
TCP	  16        5         11       
INET	  23        10        13       
FRAG	  0         0         0 

netstat

常用

sudo netstat -tulpen # 监听端口 + 进程 + 用户 sudo netstat -plant # 所有 TCP 连接(含非监听) netstat -s # 协议统计 netstat -rn # 路由表(现代替代:ip route) netstat -i # 网卡统计(替代:ip -s link)

与 ss 的一一对应

目的netstatss(推荐)
监听端口+进程sudo netstat -tulpensudo ss -tulnp
所有 TCP 连接sudo netstat -plantsudo ss -tanp
仅监听 TCPsudo netstat -ltnpsudo ss -ltnp
统计汇总netstat -sss -s
http://www.dtcms.com/a/592901.html

相关文章:

  • 《中医基础理论》- 2.哲学基础之藏象学说
  • 【Java 开发日记】我们来说一下 Mybatis 的缓存机制
  • 做直播导航网站好西安网站搭建的公司
  • 简要概括自建网站的优缺点网站的标题怎么做吸引人
  • ⸢ 拾肆-Ⅰ⸥⤳ 实战检验应用实践(上):制定规范 开展演练
  • web网页开发,在线物流管理系统,基于Idea,html,css,jQuery,jsp,java,SSM,mysql
  • 企业级混合存储架构:MySQL + MinIO 混合存储实践
  • Android 底部导航栏 (BottomNavigationView) 制作教程
  • 当“老龄化”撞上“数字化”:金融业的“续命解药”还是“增长新图”?银行保险AI人工智能数字化营销销售培训老师培训讲师
  • ArrayList与LinkedList的比较
  • 魏公村网站建设建设部网站电话
  • MySQL索引篇 -- 从数据页的角度看B+树
  • 使用 Newtonsoft.Json(Json.NET)库将对象导出为格式化的 JSON 文件
  • 林州市网站建设给个网站好人有好报
  • 使用前端框架vue做一个小游戏
  • 【操作系统原理】进程优先级与命令行参数、环境变量详解
  • 【深度学习新浪潮】扩散模型中,VAE潜空间正则化如何为生成带来帮助?
  • 从零学习Node.js框架Koa 【四】Koa 与数据库(MySQL)连接,实现CRUD操作
  • Zotero在代理模式下无法同步问题
  • LeetCode(python)——438.找到字符串中所有字母异位词
  • 解决添加asp.net网站报错请添加 MIME 映射
  • 浙江省工程建设管理协会网站常州小程序开发公司
  • ASP vs ASP.NET vs ASP.NET Core:三代微软 Web 技术核心区别解析
  • 【项目设计】基于正倒排索引的Boost搜索引擎
  • 建网站需要几程序员关键词网站优化平台
  • 深圳网站建设方案书做sns网站需要什么
  • C语言常见推理题
  • leetcode 3542. 将所有元素变为 0 的最少操作次数 中等
  • 一文掌握,sward安装与配置
  • Supabase 开源 BaaS 平台的技术内核与实践指南