小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
在使用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
文件的内容,free
、top
、ps
等其他系统信息命令都是使用的此文件。
使用less
或cat
查看/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
=================================
可以看出,信息是按程序的内存使用情况升序输出的。
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !