使用 Linux 系统,我们十分关心进程占用内存、cpu 等的使用情况,该文章介绍如何查看 linux 下最消耗 CPU、内存的进程命令:ps (Process Status) 用于报告当前进程的快照。
基本使用
ps -ejf 命令是查看 所有 运行中的进程,并以 详细(完整) 的格式列出它们的关键信息(包括 父进程 ID (PPID)、进程组 ID (PGID) 和 完整命令行 (CMD))的最全面方法之一。
ps -ejf
参数说明:
-e: 选择所有进程 (Select all processes)。这会列出系统上所有用户和后台进程。
-j: 以作业格式(Job format)列出。这种格式通常会包含一些额外的与作业控制相关的字段,例如:PGID(进程组 ID)和 SID(会话 ID)。
-f: 以完整格式(Full format)列出。这是最常用的选项之一,它提供了一个非常详细的进程列表,输出字段(通常情况下)
| 列名 |
英文解释 |
中文解释 |
| UID |
User ID |
启动进程的用户 ID |
| PID |
Process ID |
进程的唯一 ID |
| PPID |
Parent Process ID |
父进程的 ID |
| C |
CPU Usage |
进程的 CPU 使用率(在采样期间) |
| STIME |
Start Time |
进程启动时的日期和时间 |
| TTY |
Controlling terminal |
进程关联的控制终端 |
| TIME |
Cumulative CPU Time |
进程使用的累计 CPU 时间 |
| CMD |
Command |
启动进程的完整命令行及参数 |
| PGID |
Process Group ID |
进程组 ID(来自 -j 选项) |
| SID |
Session ID |
会话 ID(来自 -j 选项) |
CPU 占用最多的前 10 个进程
ps auxw | head -1; ps auxw | sort -rn -k3 | head -10
内存消耗最多的前 10 个进程
ps auxw | head -1; ps auxw | sort -rn -k4 | head -10
虚拟内存使用最多的前 10 个进程
ps auxw | head -1; ps auxw | sort -rn -k5 | head -10
统计所有的进程数(包括 light-weight process (LWP))
ps h -Led -o user | sort | uniq -c | sort -n
CPU 低、Load 高
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
其他方法
ps auxw --sort=rss
ps auxw --sort=%cpu
参数说明
MEM 进程的内存占用率,MAJFL is the major page fault count
VSZ 进程所使用的虚存的大小
RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the “resident set size” meaning physical memory used)
TTY 与进程关联的终端(tty)
- 串行端口终端(
/dev/ttySn)
- 伪终端(
/dev/pty/)
- 控制终端(
/dev/tty)
- 控制台终端(
/dev/ttyn, /dev/console)
- 虚拟终端(
/dev/pts/n)
STAT 检查的状态:进程状态使用字符表示的
D 不可中断 Uninterruptible sleep (usually IO)
I idle 空闲
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)