白沙黎族自治县网站建设_网站建设公司_版式布局_seo优化
2026/1/21 20:13:50 网站建设 项目流程

ps命令

下面给你一组“更全、更强”的命令组合,用于 Kafka 进程性能分析。你可以把它们当作一套排查脚本:从线程、CPU、IO、网络、GC、JVM 堆、以及系统层面逐层分析。

我会按从轻量到重型排序,并且说明每条命令的用途与解读要点。


1. 线程级别(更全面的 ps / top)

1.1 线程列表(带线程名、CPU、内核等待、内存、运行时间)

ps -eLo pid,tid,comm,stat,wchan:25,pcpu,pmem,etime --sort=-pcpu | awk '$1==14453' | head -200
  • comm:线程名(非常重要)

  • wchan:内核等待函数

  • pcpu:线程 CPU 占用

  • pmem:线程占用内存(通常不敏感,但仍有用)


1.2 top 实时线程视图(最常用)

top -H -p 14453

P(CPU)或 M(内存)排序。


1.3 查看线程等待函数分布(统计)

ps -eLo pid,tid,wchan --sort=wchan | awk '$1==14453' | awk '{print $3}' | sort | uniq -c | sort -nr | head -50

可以看到 Kafka 线程集中在 futex_wait_queue_me / ep_poll 还是其他。


2. CPU 级别(系统/进程/线程)

2.1 pidstat:线程级 CPU 统计(实时)

pidstat -t -p 14453 1 5

输出解释:

  • %usr:用户态 CPU

  • %sys:内核态 CPU

  • %guest:虚拟机

  • CPU:CPU 核心编号


2.2 perf top(实时热点分析,最强)

perf top -p 14453

如果你想看线程热点:

perf top -p 14453 -g

3. IO 级别(磁盘/网络)

3.1 iostat:磁盘 IO 监控(最关键)

iostat -x 1 5

关注:

  • %util(是否接近 100)

  • await(是否高)

  • avgqu-sz(队列长度)


3.2 pidstat IO(进程级 IO 统计)

pidstat -d -p 14453 1 5

3.3 iotop(实时 IO 排名)

iotop -oPa | head -20

4. 网络级别(连接/吞吐/延迟)

4.1 查看 Kafka 端口连接状态

ss -ntlp | grep 9092
ss -s

4.2 查看连接数、状态分布

ss -nt state established '( sport = :9092 )' | wc -l
ss -nt state close-wait '( sport = :9092 )' | wc -l

4.3 查看 socket 队列是否积压

ss -s | grep -E 'tcp:|connections'

5. JVM 层(GC / 堆 / 线程)

5.1 立即输出 JVM 参数(如果 attach 失败可跳过)

jcmd 14453 VM.flags
jcmd 14453 VM.command_line

如果 attach 不行,可以从 Kafka 启动脚本查看。


5.2 GC 日志(如果已开启)

如果你开启了 GC log,可以实时 tail:

tail -200 /path/to/gc.log

建议生产环境开启:

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/kafka/gc.log

6. 关键命令:生成堆栈(如果 attach 失败,用 kill -3)

kill -3 14453

然后查看 Kafka 日志输出。
如果 kill -3 没有输出,说明 JVM 处于“内核阻塞”状态。


7. 最强“系统级”诊断:dmesg / vmstat / sar

7.1 系统整体负载

vmstat 1 5

7.2 系统网络/IO 报错

dmesg | tail -100

7.3 资源利用历史(如果安装 sar)

sar -u 1 5
sar -d 1 5

8. 一条命令搞定“更全”的线程信息(推荐)

如果你想一次性列出线程名、CPU、等待函数、以及时间:

ps -eLo pid,tid,comm,stat,wchan:25,pcpu,pmem,etime --sort=-pcpu | awk '$1==14453' | head -200

你现在最需要的输出

为了快速定位问题,请你执行下面三条命令,并把输出贴出来(越多越好):

ps -eLo pid,tid,comm,stat,wchan:25,pcpu,pmem,etime --sort=-pcpu | awk '$1==14453' | head -200
pidstat -t -p 14453 1 5
iostat -x 1 5

wchanps 输出中用于显示 线程当前在内核中等待的函数(wait channel) 的字段。

而你问的 wchan:25 是一种 格式控制写法,用于控制输出宽度。


1. wchan 是什么?

在 Linux 中,每个进程/线程在进入内核等待时,会记录它正在等待的内核函数名,例如:

  • futex_wait_queue_me

  • ep_poll

  • read

  • write

  • fsync

wchan 就是显示这个等待函数名的字段。


2. wchan:25 的含义

ps-o 格式中,字段:宽度 表示 输出字段宽度

所以:

wchan:25

表示:

  • wchan 字段的输出宽度 固定为 25 个字符

  • 如果函数名不足 25 个字符,左对齐并填充空格

  • 如果函数名超过 25 个字符,会被截断(通常不会超过太多)


3. 为什么要用 wchan:25

因为 wchan 字段有时很长,例如:

futex_wait_queue_me
poll_schedule_timeout
ep_poll

为了让表格对齐更整齐,常用 :25:20 来控制宽度。


4. 你可以改成其他宽度

例如:

  • wchan:20(更紧凑)

  • wchan:35(更宽,不容易截断)

示例:

ps -o pid,tid,stat,wchan:35,pcpu,comm -Lp 14453

5. 你如果想要“自动适配宽度”,可以省略宽度

ps -o pid,tid,stat,wchan,pcpu,comm -Lp 14453

但输出可能会变得不整齐。


如果你希望我给你一个“最实用、最整齐、可读性最强”的 ps 命令格式,我可以直接给你一个标准模板。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询