统计使用内存和cpu前十的进程
top 命令
和ps 命令
查看进程信息,其中包含了cpu使用率和内存使用率
root@hcss-ecs-c2b8:/var/test# top -n1
top - 00:20:46 up 19 days, 8 min, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 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
MiB Mem : 1783.4 total, 104.7 free, 359.0 used, 1319.7 buff/cache
MiB Swap: 1025.0 total, 878.3 free, 146.7 used. 1213.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 167968 10276 5920 S 0.0 0.6 0:36.62 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
13 root 20 0 0 0 0 S 0.0 0.0 0:03.58 ksoftirqd/0
14 root 20 0 0 0 0 I 0.0 0.0 0:44.69 rcu_sched
15 root rt 0 0 0 0 S 0.0 0.0 0:04.10 migration/0
16 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
20 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
21 root rt 0 0 0 0 S 0.0 0.0 0:03.78 migration/1
22 root 20 0 0 0 0 S 0.0 0.0 0:02.84 ksoftirqd/1
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 inet_frag_wq
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
28 root 20 0 0 0 0 S 0.0 0.0 0:00.74 khungtaskd
29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
30 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
31 root 20 0 0 0 0 S 0.0 0.0 0:36.59 kcompactd0
32 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
33 root 39 19 0 0 0 S 0.0 0.0 0:13.34 khugepaged
80 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
81 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
82 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio
root@hcss-ecs-c2b8:/var/test#
root@hcss-ecs-c2b8:/var/test# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 167968 10276 ? Ss Sep20 0:36 /lib/systemd/systemd noibrs --system --
root 2 0.0 0.0 0 0 ? S Sep20 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep20 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep20 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< Sep20 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< Sep20 0:00 [netns]
root 8 0.0 0.0 0 0 ? I< Sep20 0:00 [kworker/0:0H-events_highpri]
root 10 0.0 0.0 0 0 ? I< Sep20 0:00 [mm_percpu_wq]
root 11 0.0 0.0 0 0 ? S Sep20 0:00 [rcu_tasks_rude_]
root 12 0.0 0.0 0 0 ? S Sep20 0:00 [rcu_tasks_trace]
root 13 0.0 0.0 0 0 ? S Sep20 0:03 [ksoftirqd/0]
root 14 0.0 0.0 0 0 ? I Sep20 0:44 [rcu_sched]
root 15 0.0 0.0 0 0 ? S Sep20 0:04 [migration/0]
root 16 0.0 0.0 0 0 ? S Sep20 0:00 [idle_inject/0]
root 18 0.0 0.0 0 0 ? S Sep20 0:00 [cpuhp/0]
root 19 0.0 0.0 0 0 ? S Sep20 0:00 [cpuhp/1]
root 20 0.0 0.0 0 0 ? S Sep20 0:00 [idle_inject/1]
root 21 0.0 0.0 0 0 ? S Sep20 0:03 [migration/1]
root 22 0.0 0.0 0 0 ? S Sep20 0:02 [ksoftirqd/1]
root 24 0.0 0.0 0 0 ? I< Sep20 0:00 [kworker/1:0H-events_highpri]
root 25 0.0 0.0 0 0 ? S Sep20 0:00 [kdevtmpfs]
root 26 0.0 0.0 0 0 ? I< Sep20 0:00 [inet_frag_wq]
top -n -b 1 > xxx
打印一次的结果放入xxx文件中
tail -n +8 xxx
获取第八行开始的文本在使用awk对每一行文本进行计算和打印
root@hcss-ecs-c2b8:/var/test# top -b -n 1 > xxx
root@hcss-ecs-c2b8:/var/test# tail -n +8 xxx | awk '{array[$NF]+=$6}END{for (i in array) print i,array[i]}'
kworker/u4:1-flush-252:0 0
rsyslogd 2416
kmpath_rdacd 0
rcu_sched 0
khungtaskd 0
top 3828
ext4-rsv-conver 0
kthreadd 0
kcompactd0 0
unattended-upgr 3216
kmpath_handlerd 0
kdevtmpfs 0
edac-poller 0
kswapd0 0
oom_reaper 0
udisksd 6456
uniagent 21504
java 23004
cron 2456
BT-Panel 37740
vfio-irqfd-clea 0
ModemManager 5000
idle_inject/0 0
idle_inject/1 0
hostwatch 8752
rcu_gp 0
vim 10792
kaluad 0
ksoftirqd/0 0
wrapper 1168
ksoftirqd/1 0
dockerd 31328
cryptd 0
kworker/1:1H-kblockd 0
kthrotld 0
md 0
ksmd 0
systemd-resolve 2924
systemd 19456
kworker/0:3-events 0
jbd2/vda1-8 0
atd 2012
acpi_thermal_pm 0
BT-Task 24008
chronyd 2044
kworker/0:1-events 0
ipv6_addrconf 0
charger_manager 0
irqbalance 2776
migration/0 0
systemd-udevd 4352
migration/1 0
hostguard 23268
kstrp 0
mm_percpu_wq 0
kworker/u5:0 0
kworker/0:0H-events_highpri 0
slub_flushwq 0
netns 0
uuidd 2524
sshd 57304
watchdogd 0
scsi_eh_0 0
kauditd 0
kworker/u4:0-events_power_efficie+ 0
sort -k 2 -n -r | head -10
根据第二列的数字进行倒序,支取10个
root@hcss-ecs-c2b8:/var/test# tail -n +8 xxx | awk '{array[$NF]+=$6}END{for (i in array) print i,array[i]}' | sort -k 2 -n -r |head -10
apache2 398552
systemd-journal 93652
BT-Panel 37740
containerserver 31752
dockerd 31328
multipathd 27360
sshd 26856
snapd 24644
BT-Task 24008
hostguard 23268
root@hcss-ecs-c2b8:/var/test#
最后我们将这些命令写入shell脚本文件中
root@hcss-ecs-c2b8:/var/test# vim memory_use.sh
#!/bin/bash
memory() {
#1.收集任务管理器进程信息
temp_file=`mktemp memory.XXX`
top -b -n 1 > "$temp_file"
#2.按进程统计内存使用大小
tail -n +8 "$temp_file" | awk '{array[$NF]+=$6}END{for (i in array) print array[i],i}' | sort -k 2 -n -r |head -10
}
memory
~
~
~
:wq
root@hcss-ecs-c2b8:/var/test# ./memory_use.sh
93668 systemd-journal
9024 containerd-shim
8752 hostwatch
6456 udisksd
6184 NetworkManager
5824 packagekitd
5604 nginx
5000 ModemManager
4888 systemd-logind
4772 dbus-daemon
root@hcss-ecs-c2b8:/var/test#
每当我们执行这个脚本的时候我们就能获取当前使用内存前十的进程的名称
我们可以将次脚本每次输出的结果追加放入一个日志文件中,且使用定时任务重定时打印系统内存使用情况,方便排查服务器问题
root@hcss-ecs-c2b8:/var/test# ./memory_use.sh
root@hcss-ecs-c2b8:/var/test# cat memory_use_log.txt
93800 systemd-journal
9152 containerd-shim
8752 hostwatch
6456 udisksd
6184 NetworkManager
5824 packagekitd
5604 nginx
5000 ModemManager
4888 systemd-logind
4772 dbus-daemon
root@hcss-ecs-c2b8:/var/test# ./memory_use.sh
root@hcss-ecs-c2b8:/var/test# cat memory_use_log.txt
93800 systemd-journal
9152 containerd-shim
8752 hostwatch
6456 udisksd
6184 NetworkManager
5824 packagekitd
5604 nginx
5000 ModemManager
4888 systemd-logind
4772 dbus-daemon
93804 systemd-journal
9120 containerd-shim
8752 hostwatch
6456 udisksd
6184 NetworkManager
5824 packagekitd
5604 nginx
5000 ModemManager
4888 systemd-logind
4772 dbus-daemon
*/1 * * * * /var/test/memory_use.sh
这里我们将脚本设置文每分钟执行一次