一、top命令
top是linux系统的一个基本命令,可以用来实时查看系统的进程状态和资源占用情况,包括CPU、内存、IO等。在top命令中,如果按下m键,则可以按内存占用率对进程进行排序。以下是查看当前内存使用情况的top命令示例:
$ top - 22:51:45 up 1:08, 1 user, load average: 0.12, 0.19, 0.19
Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.8 us, 0.9 sy, 0.0 ni, 96.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0
KiB Mem : 32921128 total, 17461632 free, 10835900 used, 4673596 buff/cache
KiB Swap: 524284 total, 524284 free, 0 used. 21302332 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5579 www-data 20 0 456124 401176 2724 S 0.0 1.2 0:38.92 apache2
3317 root 20 0 1390520 183132 6372 S 16.2 0.6 9:17.72 dockerd
2628 mysql 20 0 2850640 143500 16324 S 0.3 0.4 1:09.08 mysqld
1231 root 20 0 228572 32888 14180 S 6.9 0.1 1:23.22 containerd
5454 root 20 0 608160 27248 18920 S 0.0 0.1 0:58.04 containerd-shim
2745 root 20 0 488412 23672 18392 S 0.0 0.1 0:07.50 containerd-shim
4848 root 20 0 602928 19052 12708 S 0.0 0.1 0:00.28 sshd
4822 root 20 0 602944 19016 12684 S 0.0 0.1 0:00.28 sshd
可以看到,在top命令的输出中,有一个KiB Mem的行,显示了当前系统的总内存和可用内存,还有一个%MEM的列,显示了每个进程的内存占用率。
需要注意的是,top命令也可以查看CPU占用率,而且默认情况下是按CPU占用率排序,如果要按内存排序,则需要按下m键。同时,如果需要查看更详细的内存使用情况,则可以使用其他命令。
二、free命令
free命令可以查看系统内存和交换空间的使用情况。以下是查看当前内存使用情况的free命令示例:
$ free -h
total used free shared buff/cache available
Mem: 31G 10G 19G 2.8M 1.4G 21G
Swap: 512M 0B 512M
可以看到,在free命令的输出中,有一个Mem行,显示了当前系统的总内存和可用内存。
如果需要查看更详细的内存使用情况,则可以添加参数“-m”来显示内存使用情况的详细信息:
$ free -m
total used free shared buff/cache available
Mem: 32121 10472 19800 2 1432 21315
Swap: 511 0 511
可以看到,在添加“-m”参数后,输出中的内存使用情况信息都以MB为单位显示。
三、vmstat命令
vmstat命令可以查看系统的虚拟内存使用情况,包括页表、虚拟内存、磁盘IO等。以下是查看当前内存使用情况的vmstat命令示例:
$ vmstat -s
32921128 K total memory
10839992 K used memory
5588880 K active memory
1461684 K inactive memory
17461632 K free memory
467696 K buffer memory
276580 K swap cache
524284 K total swap
0 K used swap
524284 K free swap
91498878 non-nice user cpu ticks
184296 nice user cpu ticks
910626 system cpu ticks
190944925 idle cpu ticks
3378952 IO-wait cpu ticks
64 IRQ cpu ticks
1878 softirq cpu ticks
0 stolen cpu ticks
37278728 pages paged in
1397199226 pages paged out
26 pages swapped in
0 pages swapped out
1538391014 interrupts
1124942483 CPU context switches
3310415 boot time
984586 forks
可以看到,vmstat命令的输出非常详细,可以查看很多系统资源的使用情况,包括内存、CPU、IO等。其中,关于内存的信息包括了总内存、已用内存、活跃内存、未活跃内存、可用内存、缓存内存、交换缓存等。
四、ps命令
ps命令可以查看当前系统的进程状态和资源占用情况,包括CPU、内存、IO等。以下是查看当前进程内存使用情况的ps命令示例:
$ ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
0 MB (sd-pam)
0 MB /lib/systemd/systemd-journald
0 MB /lib/systemd/systemd-udevd
0 MB /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
0 MB /usr/sbin/cron -f
0 MB [kdevtmpfs]
0 MB [kdmflush]
0 MB [khugepaged]
0 MB [khungtaskd]
0 MB [ksmd]
0 MB [ksoftirqd/0]
0 MB [kswapd0]
0 MB [kthreadd]
0 MB [kworker/0:0]
0 MB [kworker/0:0H]
0 MB [kworker/0:1]
0 MB [kworker/0:1H]
0 MB [kworker/u256:0]
...
可以看到,ps命令的输出中,首先使用awk命令计算了每个进程占用的内存大小,并按照从小到大的顺序进行排序。这种方式可以很方便地查看每个进程的内存使用情况,并找出最耗内存的进程。
五、smem命令
与ps命令类似,smem命令也可以查看当前系统的进程状态和资源占用情况,包括CPU、内存、IO等。但是,通过smem命令可以更方便地查看进程占用的内存情况,并且可以根据内存使用情况进行排序。以下是查看当前进程内存使用情况的smem命令示例:
$ smem -t -k -n -c "pid command rss"
PID COMMAND RSS
3317 /usr/bin/dockerd 183132 kB
633 /lib/systemd/systemd-journald 130080 kB
1231 /usr/bin/containerd 107884 kB
4309 /usr/sbin/apache2 -DFOREGROUND 99724 kB
5579 /usr/sbin/apache2 -DFOREGROUND 95140 kB
3892 /usr/sbin/apache2 -DFOREGROUND 87584 kB
5014 /usr/sbin/apache2 -DFOREGROUND 84860 kB
4753 /usr/sbin/apache2 -DFOREGROUND 83660 kB
4912 /usr/sbin/apache2 -DFOREGROUND 83532 kB
2533 /usr/sbin/apache2 -DFOREGROUND 83496 kB
4822 sshd: root@pts/0 19016 kB
5454 containerd-shim -namespace moby 17492 kB
2745 containerd-shim -namespace moby 17492 kB
...
可以看到,smem命令的输出中,按照RSS(常驻集大小)排序,列出了当前所有进程的占用内存情况,同时也显示了进程的PID和命令名称。
总结
通过本文的介绍,我们可以看到,Linux系统提供了很多命令来查看内存使用情况,包括top、free、vmstat、ps、smem等。每个命令都有其独特的优点和适用场景,可以根据实际需要进行选择和使用。