在linux系统运行中,了解进程具体运行在哪个cpu核心上,对于分析进程调度策略、排查cpu资源瓶颈、优化多核场景下的程序性能都有重要意义,下面介绍几种常用的查看方法。
使用ps命令查看
ps命令是linux下最常用的进程查看工具,通过指定输出字段可以直接获取进程对应的cpu核心信息。其中PPSR字段表示进程当前运行的处理器编号,PSR字段表示进程最后运行的处理器编号。
查看指定进程(例如进程ID为1234的进程)所在的cpu核心,可以执行以下命令:
# 查看进程1234的PSR字段,即最后运行的cpu核心 ps -o pid,psr,comm -p 1234
如果要查看所有进程的cpu核心归属情况,可以执行:
# 输出所有进程的PID、最后运行的CPU核心、进程命令 ps -eo pid,psr,comm
命令输出结果中,PSR列的数值就是对应的cpu核心编号,从0开始计数。
使用top命令查看
top命令是动态的进程监控工具,也可以实时查看进程所在的cpu核心。启动top命令后,默认不会显示cpu核心字段,需要手动调整显示列。
操作步骤为:执行top命令进入监控界面,按下f键进入字段管理界面,找到P = Last Used Cpu (SMP)选项,按下空格键选中该字段,然后按下Enter键返回监控界面,此时就可以看到P列显示的就是进程最后运行的cpu核心编号。
如果只想查看指定进程的信息,可以在top界面按下o键,输入过滤条件,例如输入PID=1234就可以只显示进程ID为1234的进程信息。
使用htop命令查看
htop是top的增强版本,界面更友好,默认就会显示进程对应的cpu核心信息。如果系统没有安装htop,可以先通过包管理器安装:
# Ubuntu/Debian系统安装 sudo apt install htop # CentOS/RHEL系统安装 sudo yum install htop
安装完成后执行htop命令,界面中的CPU列就是进程当前运行或者最后运行的cpu核心编号,也可以直接通过搜索功能查找指定进程,按下/键输入进程名或者PID即可快速定位。
通过/proc文件系统查看
linux的/proc文件系统下包含了进程相关的所有实时信息,每个进程对应/proc/[pid]目录,其中的status文件里记录了进程的cpu相关信息。
查看指定进程的cpu核心信息,可以执行以下命令:
# 查看进程1234的status文件,过滤Cpus_allowed相关字段 cat /proc/1234/status | grep Cpu
输出结果中,Cpus_allowed表示进程允许运行的cpu核心掩码,Cpus_allowed_list表示允许运行的cpu核心列表,Seccomp_filters之后的last_cpu字段表示进程最后运行的cpu核心编号。如果要查看进程当前实际运行的cpu,可以结合ps命令的PPSR字段:
# 查看进程1234当前运行的cpu核心 ps -o pid,ppsr,comm -p 1234
方法对比
不同方法的适用场景和特点如下:
| 方法 | 特点 | 适用场景 |
|---|---|---|
| ps命令 | 轻量,输出简洁,支持批量查询 | 快速查询单个或多个进程的cpu归属,脚本调用 |
| top命令 | 动态实时刷新,可交互操作 | 实时监控进程调度变化,临时排查问题 |
| htop命令 | 界面友好,信息展示更直观 | 交互式查看,需要更清晰的视觉展示 |
| /proc文件系统 | 底层信息,数据最原始 | 需要获取进程最详细的cpu相关信息,自定义解析 |