Linux中检查内存使用情况的几种常见方法

295 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

在使用Linux服务器时,我们可能经常需要查看服务器当前可用的和已经使用的资源情况,比如内存、CPU、磁盘等,如果某一应用占用了系统太多的资源,导致系统内应用速度减慢或者出现故障时,我们需要找到它并且修复,那我们首先要检查的问题之一就是系统内存使用情况,接下来将介绍几种检查Linux服务器内存使用情况的方法。

free命令

free命令是用于检查Linux系统内存使用最广泛的命令,它能够显示系统中物理上的空闲(free)和已用(used)内存,还有交换区(Swap)内存,以及内核使用的缓冲区和缓存。

通常情况下都是执行free -m命令以友好的格式打印输出:

free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        342M        1.3G        8.7M        2.1G        3.1G
Swap:            0B          0B          0B
  • total:内存总量
  • used:已使用的内存(used = total - free - buffers - cache
  • free:可用/未使用的内存(free = total – used – buff/cache
  • shared:在两个或多个进程之间共享的内存量
  • buff/cache:缓冲区和缓存总的使用内存量
  • available:可用于启动新应用程序可用内存量(不含交换分区)

top命令

top命令是用于查看进程的资源使用情况的命令,提供正在运行的系统的动态实时视图,基于每个进程检查CPU及内存等资源的使用情况。

要调用命令,只需键入top

top - 15:55:17 up 4 days,  1:40,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  94 total,   1 running,  93 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3880152 total,  1374192 free,   350816 used,  2155144 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3231240 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4501 polkitd   20   0   52812  10136   3132 S   0.3  0.3   4:53.28 redis-server
11462 root      20   0  162108   2180   1488 R   0.3  0.1   0:00.21 top
    1 root      20   0  128156   6708   4096 S   0.0  0.2   0:05.19 systemd
···

%MEM列指每个运行进程的可用物理内存已用份额的信息。

另外,top命令还可以根据CPU的占用量和内存的使用大小来进行排序,总之很强大。

/proc/meminfo

检查RAM内存使用情况的最简单方法是显示/proc/meminfo文件的内容,freetopps等其他系统信息命令都是使用的此文件。

使用lesscat查看/proc/meminfo文件的内容:

cat /proc/meminfo
MemTotal:        3880152 kB
MemFree:         1374540 kB
MemAvailable:    3231596 kB
Buffers:          122752 kB
Cached:          1858296 kB
SwapCached:            0 kB
Active:          1438440 kB
Inactive:         720952 kB
Active(anon):     178948 kB
Inactive(anon):     8272 kB
Active(file):    1259492 kB
···

该文件中包含了大量的和系统内存、交换区等相关的信息。

ps_mem脚本

ps_mem是一个Python脚本,可以展示每个程序的内存使用情况。同时支持Python2和Python3,可以使用pip install ps_mem进行安装。

ps_mem
 Private  +   Shared  =  RAM used       Program

176.0 KiB +  35.5 KiB = 211.5 KiB       agetty
232.0 KiB +  38.5 KiB = 270.5 KiB       atd
316.0 KiB +  78.0 KiB = 394.0 KiB       irqbalance
540.0 KiB +  70.5 KiB = 610.5 KiB       auditd
448.0 KiB + 252.5 KiB = 700.5 KiB       qemu-ga
688.0 KiB +  69.0 KiB = 757.0 KiB       crond
788.0 KiB +  65.5 KiB = 853.5 KiB       systemd-logind
  1.0 MiB + 235.5 KiB =   1.2 MiB       dbus-daemon
  1.1 MiB + 126.5 KiB =   1.3 MiB       master
  1.2 MiB + 443.5 KiB =   1.6 MiB       pickup
  1.2 MiB + 443.5 KiB =   1.6 MiB       qmgr
  1.5 MiB + 431.0 KiB =   1.9 MiB       sftp-server (2)
  1.3 MiB + 842.5 KiB =   2.2 MiB       systemd-journald
  3.0 MiB + 154.0 KiB =   3.1 MiB       lvmetad
  2.6 MiB + 844.0 KiB =   3.4 MiB       systemd-udevd
  2.0 MiB +   2.2 MiB =   4.1 MiB       bash (4)
  4.3 MiB + 127.5 KiB =   4.4 MiB       vim
  3.9 MiB + 893.5 KiB =   4.8 MiB       systemd
  6.1 MiB + 957.0 KiB =   7.1 MiB       NetworkManager
  6.5 MiB + 905.5 KiB =   7.4 MiB       rsyslogd
  7.4 MiB + 875.0 KiB =   8.2 MiB       polkitd
  9.3 MiB + 225.5 KiB =   9.5 MiB       redis-server
  6.8 MiB +   3.4 MiB =  10.2 MiB       sshd (5)
 11.3 MiB +   1.8 MiB =  13.0 MiB       tuned
 13.3 MiB +   9.5 KiB =  13.3 MiB       containerd-shim-runc-v2
 17.4 MiB +   1.2 MiB =  18.7 MiB       docker-proxy (2)
 23.4 MiB +   1.9 MiB =  25.3 MiB       firewalld
 40.0 MiB +  46.5 KiB =  40.0 MiB       containerd
 84.9 MiB + 157.5 KiB =  85.1 MiB       dockerd
---------------------------------
                        271.4 MiB
=================================

可以看出,信息是按程序的内存使用情况升序输出的。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !