你可能也会遇到在 Linux 系统中找出 CPU 占用高的进程的情形。如果是这样,那么你需要列出系统中 CPU 占用高的进程列表来确定。我认为只有两种方法能实现:使用 top 命令 和 ps 命令。出于一些理由,我更倾向于用 top 命令而不是 ps 命令。但是两个工具都能达到你要的目的,所以你可以根据需求决定使用哪个。这两个工具都被 Linux 系统管理员广泛使用。
怎样使用 top 命令找出 Linux 中 CPU 占用高的进程
在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个。top 命令提供了 Linux 系统运行中的进程的动态实时视图。它能显示系统的概览信息和 Linux 内核当前管理的进程列表。它显示了大量的系统信息,如 CPU 使用、内存使用、交换内存、运行的进程数、目前系统开机时间、系统负载、缓冲区大小、缓存大小、进程 PID 等等。默认情况下,top 命令的输出结果按 CPU 占用进行排序,每 5 秒中更新一次结果。如果你想要一个更清晰的视图来更深入的分析结果,以批处理模式运行 top 命令 是最好的方法。同时,你需要 理解 top 命令输出结果的含义 ,这样才能解决系统的性能问题。
[root@feiyu ~]# top -b | head -50
top - 06:23:00 up 1 day, 8:40, 2 users, load average: 0.05, 0.05, 0.05
Tasks: 119 total, 1 running, 117 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880180 total, 2223808 free, 776504 used, 879868 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2844704 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 43584 3872 2560 S 0.0 0.1 0:01.69 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.28 kworker/u4:0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.82 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.43 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:32.17 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.39 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.35 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.42 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.38 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 0:00.02 khungtaskd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
27 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
29 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
31 root 20 0 0 0 0 S 0.0 0.0 0:13.53 kworker/1:1
36 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
37 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
38 root 39 19 0 0 0 S 0.0 0.0 0:00.53 khugepaged
39 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
47 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
49 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd
50 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kaluad
51 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
53 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ipv6_addrconf
66 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq
165 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kauditd
206 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 iscsi_eh
256 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
263 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0
264 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_0
265 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_1
上面的命令的各部分解释:
- top:命令
- -b:批次档模式
- head -50:显示输出结果的前 50 个
- PID:进程的 ID
- USER:进程的归属者
- PR:进程的等级
- NI:进程的 NICE 值
- VIRT:进程使用的虚拟内存
- RES:进程使用的物理内存
- SHR:进程使用的共享内存
- S:这个值表示进程的状态: S = 睡眠,R = 运行,Z = 僵尸进程
- %CPU:进程占用的 CPU 比例
- %MEM:进程使用的 RAM 比例
- TIME+:进程运行了多长时间
- COMMAND:进程名字
如果你想看命令的完整路径而不是命令名字,以运行下面的格式 top 命令:
[root@feiyu ~]# top -c -b | head -50
top - 06:23:48 up 1 day, 8:41, 2 users, load average: 0.13, 0.07, 0.05
Tasks: 120 total, 1 running, 118 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 93.8 id, 3.1 wa, 0.0 hi, 3.1 si, 0.0 st
KiB Mem : 3880180 total, 2221596 free, 778064 used, 880520 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2843048 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 43584 3872 2560 S 0.0 0.1 0:01.69 /usr/lib/systemd/systemd --switched-root --system --deseri+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 [kthreadd]
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
5 root 20 0 0 0 0 S 0.0 0.0 0:00.28 [kworker/u4:0]
6 root 20 0 0 0 0 S 0.0 0.0 0:00.82 [ksoftirqd/0]
7 root rt 0 0 0 0 S 0.0 0.0 0:00.43 [migration/0]
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
9 root 20 0 0 0 0 S 0.0 0.0 0:32.19 [rcu_sched]
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [lru-add-drain]
11 root rt 0 0 0 0 S 0.0 0.0 0:00.39 [watchdog/0]
12 root rt 0 0 0 0 S 0.0 0.0 0:00.35 [watchdog/1]
13 root rt 0 0 0 0 S 0.0 0.0 0:00.42 [migration/1]
14 root 20 0 0 0 0 S 0.0 0.0 0:00.38 [ksoftirqd/1]
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/1:0H]
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kdevtmpfs]
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns]
20 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [khungtaskd]
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [writeback]
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kintegrityd]
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kblockd]
27 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [md]
28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [edac-poller]
29 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [watchdogd]
31 root 20 0 0 0 0 S 0.0 0.0 0:13.53 [kworker/1:1]
36 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kswapd0]
37 root 25 5 0 0 0 S 0.0 0.0 0:00.00 [ksmd]
38 root 39 19 0 0 0 S 0.0 0.0 0:00.53 [khugepaged]
39 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [crypto]
47 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kthrotld]
49 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kmpath_rdacd]
50 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kaluad]
51 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kpsmoused]
53 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [ipv6_addrconf]
66 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [deferwq]
165 root 20 0 0 0 0 S 0.0 0.0 0:00.03 [kauditd]
206 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [iscsi_eh]
256 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [ata_sff]
263 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [scsi_eh_0]
264 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [scsi_tmf_0]
265 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [scsi_eh_1]
怎样使用 ps 命令找出 Linux 中 CPU 占用高的进程
ps 是进程状态process status的缩写,它能显示系统中活跃的/运行中的进程的信息。它提供了当前进程及其详细信息,诸如用户名、用户 ID、CPU 使用率、内存使用、进程启动日期时间、命令名等等的快照。
[root@feiyu ~]# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head
PID PPID %MEM %CPU CMD
2695 1 1.1 1.0 /usr/local/qcloud/YunJing/YDEyes/YDService
1235 1 0.0 0.9 /usr/sbin/rshim
23203 1491 0.1 0.4 sshd: root@pts/0,pts/1
1536 1 0.1 0.1 /usr/local/qcloud/tat_agent/tat_agent
2708 2695 0.5 0.1 /usr/local/qcloud/YunJing/YDEdr
23390 23245 0.0 0.1 top
24549 2043 0.0 0.1 [python] <defunct>
1 0 0.0 0.0 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 0 0.0 0.0 [kthreadd]
上面的命令的各部分解释:
- ps:命令名字
- -e:选择所有进程
- -o:自定义输出格式
- –sort=-%cpu:基于 CPU 使用率对输出结果排序
- head:显示结果的前 10 行
- PID:进程的 ID
- PPID:父进程的 ID
- %MEM:进程使用的 RAM 比例
- %CPU:进程占用的 CPU 比例
- Command:进程名字
如果你只想看命令名字而不是命令的绝对路径,以运行下面的格式 ps 命令:
[root@feiyu ~]# ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head
PID PPID %MEM %CPU CMD
2695 1 1.1 1.0 /usr/local/qcloud/YunJing/YDEyes/YDService
1235 1 0.0 0.9 /usr/sbin/rshim
23203 1491 0.1 0.4 sshd: root@pts/0,pts/1
1536 1 0.1 0.1 /usr/local/qcloud/tat_agent/tat_agent
2708 2695 0.5 0.1 /usr/local/qcloud/YunJing/YDEdr
23390 23245 0.0 0.1 top
24549 2043 0.0 0.1 [python] <defunct>
1 0 0.0 0.0 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 0 0.0 0.0 [kthreadd]
[root@VM-8-8-centos ~]# ps -eo pid,ppid,%mem,%cpu,comm --sort=-%cpu | head
PID PPID %MEM %CPU COMMAND
2695 1 1.1 1.0 YDService
1235 1 0.0 0.9 rshim
23203 1491 0.1 0.4 sshd
1536 1 0.1 0.1 tat_agent
2708 2695 0.5 0.1 YDEdr
23390 23245 0.0 0.1 top
1 0 0.0 0.0 systemd
2 0 0.0 0.0 kthreadd
4 2 0.0 0.0 kworker/0:0H
THE END
暂无评论内容