Linux下查询内存使⽤情况的常⽤命令
1、free命令
  free 命令会显⽰系统内存的使⽤情况,包括物理内存、交换内存(swap)和内核缓冲区内存等。
$ free
total        used        free      shared  buff/cache  available
Mem:      3294632424893921142265616228721903427628352888
Swap:            000
释义:
  Mem:内存使⽤情况。
  Swap:交换空间(虚拟内存)使⽤情况。
  total:系统总共可⽤物理内存、交换空间⼤⼩。
  used:已经被使⽤的物理内存、交换空间⼤⼩。
  free:剩余可⽤物理内存、交换空间⼤⼩。
  shared:被共享使⽤的物理内存⼤⼩。
  buff/cache:被 buffer 和 cache 使⽤的物理内存⼤⼩。
  available:还可以被应⽤程序使⽤的物理内存⼤⼩。
常见⽤法:
free -h      //以更友好的⽅式显⽰,会以K、M、G为单位来显⽰
free -h -s 3  //以⼀定时间间隔重复的输出,这个命令是每3秒输出⼀次
  free 命令中的信息都来⾃于 /proc/meminfo ⽂件。
2、vmstat命令
  vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进⾏监控,是对系统的整体情况进⾏的统计。
$ vmstat
procs  -----------memory-----------  --swap--  --io--  --system--  -----cpu-----
r  b  swpd    free  buff  cache  si  so  bi  bo  in  cs    us sy id wa st
1  0    0  14376368 161976 1130836  0    0    0  3
2    2    0  0 100 0  0
  与内存使⽤情况相关的是memory列和swap列,我们只看这两列。
memory列
  swpd:使⽤的虚拟内存⼤⼩。
  free:空闲物理内存⼤⼩。
  buff:buffer cache内存⼤⼩。
  cache:page cache的内存⼤⼩。
swap列
  si:每秒从交换区读⼊到内存的⼤⼩,由磁盘调⼊内存(单位:kb/s)
  so:每秒从内存写出到交换区的⼤⼩,由内存调⼊磁盘(单位:kb/s)
常见⽤法:
vmstat 1    //每隔1s打印⼀次
vmstat 15   //每隔1秒打印⼀次,打印五次
vmstat -s    //显⽰内存相关统计信息及多种系统活动数量
3、top命令
  使⽤top命令,可以查看正在运⾏的进程和系统负载信息,包括cpu负载、内存使⽤、各个进程所占系统资源等,top命令以⼀定频率动态更新这些统计信息。
top - 10:45:21 up 211 days, 17:14,  2 users,  load average: 0.08, 0.09, 0.03
Tasks: 228 total,  1 running, 227 sleeping,  0 stopped,  0 zombie
Cpu(s):  0.4%us,  0.1%sy,  0.1%ni, 99.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32880232k total, 22032060k used, 10848172k free,  569680k buffers
Swap:        0k total,        0k used,        0k free, 17771208k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
9757 root      20  0 15160 1224  836 R  2.0  0.0  0:00.01 top
1 root      20  0 19364 1644 131
2 S  0.0  0.0  2:06.0
3 init
2 root      20  0    0    0    0 S  0.0  0.0  0:00.30 kthreadd
3 root      RT  0    0    0    0 S  0.0  0.0  0:02.75 migration/0
4 root      20  0    0    0    0 S  0.0  0.0  2:04.41 ksoftirqd/0
5 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/0
6 root      RT  0    0    0    0 S  0.0  0.0  0:39.92 watchdog/0
7 root      RT  0    0    0    0 S  0.0  0.0  0:01.44 migration/1
8 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/1
9 root      20  0    0    0    0 S  0.0  0.0  1:23.26 ksoftirqd/1
10 root      RT  0    0    0    0 S  0.0  0.0  0:31.05 watchdog/1
11 root      RT  0    0    0    0 S  0.0  0.0  0:02.06 migration/2
12 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/2
13 root      20  0    0    0    0 S  0.0  0.0  0:45.78 ksoftirqd/2
14 root      RT  0    0    0    0 S  0.0  0.0  0:29.91 watchdog/2
15 root      RT  0    0    0    0 S  0.0  0.0  0:10.61 migration/3
16 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/3
17 root      20  0    0    0    0 S  0.0  0.0  1:57.03 ksoftirqd/3
18 root      RT  0    0    0    0 S  0.0  0.0  0:32.77 watchdog/3
19 root      RT  0    0    0    0 S  0.0  0.0  0:01.82 migration/4
20 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/4
21 root      20  0    0    0    0 S  0.0  0.0  1:58.64 ksoftirqd/4
22 root      RT  0    0    0    0 S  0.0  0.0  0:32.96 watchdog/4
23 root      RT  0    0    0    0 S  0.0  0.0  0:03.28 migration/5
24 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/5
25 root      20  0    0    0    0 S  0.0  0.0  0:50.67 ksoftirqd/5
26 root      RT  0    0    0    0 S  0.0  0.0  0:30.28 watchdog/5
27 root      RT  0    0    0    0 S  0.0  0.0  0:06.60 migration/6
28 root      RT  0    0    0    0 S  0.0  0.0  0:00.00 stopper/6
  反映系统内存使⽤状况的是下⾯这两⾏:
Mem:  32880232k total, 22032060k used, 10848172k free,  569680k buffers
Swap:        0k total,        0k used,        0k free, 17771208k cached
  Mem⾏是物理内存使⽤情况,分别是:物理内存总量,已使⽤的物理内存总量,空闲物理内存总量,⽤作内核缓存区的内存量。  Swap⾏是交换区使⽤情况,分别是:交换区总量,已使⽤的交换区总量,空闲交换区总量,缓冲的交换区总量。
  Top命令的下侧区域显⽰的是各个进程使⽤的系统资源统计信息,内存相关列如下:
VIRT列:进程使⽤的虚拟内存总量,单位kb。
RES列:进程使⽤的、未被换出的物理内存⼤⼩,单位kb。
SHR列:共享内存⼤⼩,单位kb。
%MEM 列:进程使⽤的物理内存百分⽐。
4、cat /proc/meminfo
$ cat /proc/meminfo
MemTotal:      16430636 kB
MemFree:        14376492 kB
MemAvailable:  15298732 kB
Buffers:          161976 kB
Cached:          1022440 kB
SwapCached:            0 kB
Active:          1369780 kB
Inactive:        438696 kB
Active(anon):    624376 kB
Inactive(anon):    49444 kB
Active(file):    745404 kB
Inactive(file):  389252 kB
Unevictable:          0 kB
Mlocked:              0 kB
SwapTotal:            0 kB
SwapFree:              0 kB
Dirty:                60 kB
Writeback:            0 kB
AnonPages:        624068 kB
Mapped:            88140 kB
Shmem:            49752 kB
Slab:            108076 kB
SReclaimable:      82864 kB
SUnreclaim:        25212 kB
KernelStack:        4464 kB
PageTables:        10480 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    8215316 kB
Committed_AS:    1811204 kB
VmallocTotal:  34359738367 kB
VmallocUsed:      34780 kB
VmallocChunk:  34359695100 kB
linux在线命令查询平台HardwareCorrupted:    0 kB
AnonHugePages:    182272 kB
CmaTotal:              0 kB
CmaFree:              0 kB
HugePages_Total:      0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:      2048 kB
DirectMap4k:      169832 kB
DirectMap2M:    8218624 kB
DirectMap1G:    10485760 kB
5、 ps aux命令
  ps aux 命令可以查看系统中各个进程的运⾏情况,包括了进程占⽤的内存,%MEM 列就是各个进程的内存占⽤百分⽐。
$ ps aux
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
root      12310.92.21368496375824 ?      SNl  Jun21 346:39 ./bcm-agent
bls      68910.10.92892024159516 ?      Sl  Jun21  55:29 /opt/bls/lib/jre/bin/java -Duser.language=en_us -Xmx500m -XX:+UseParallelGC -XX:+UseParallelOldGC -root      3890.00.29637646212 ?        Ss  Jun21  0:14 /usr/lib/systemd/systemd-journald
root      12450.00.2120008040200 ?      Sl  Jun21  19:48 /opt/hosteye/bin/hosteye --is_child_mode=true --is_console_mode=false --start_mode=0
root      11990.00.128813228188 ?        Ssl  Jun21  2:06 /usr/sbin/rsyslogd -n
root      8980.00.157384017152 ?        Ssl  Jun21  5:08 /usr/bin/python -Es /usr/sbin/tuned -l -P
参考: