Linux内存占用分析的几个方法
The following article is from 入门小站 Author 入门小站
来自公众号:入门小站
内存管理是一个非常重要的任务,Linux内存占用分析的方法不只以上几种,用户可以根据需要选择合适的方法进行使用。对于使用Linux进行开发和运维的人员,熟练使用这些命令和方法能够帮助他们更好的管理系统资源,提高系统性能和稳定性。
1. free命令
free命令可以查看Linux系统的内存使用情况,具体包括内存总量、已使用内存、空闲内存以及 Swap 分区情况。在终端输入 free 命令后会显示以下输出结果:
$ free
total used free shared buff/cache available
Mem: 7878648 4013264 2513048 104044 1352336 3322300
Swap: 8191996 148 8191848
其中,total 行显示系统总内存大小,used 行显示已使用的内存大小,free 行显示空闲的内存大小,buff/cache 行显示的是系统缓存和缓存中的空闲内存,available 行显示可用的内存大小,它并不包括实际没有被内核分配的内存。
2. top命令
top命令是Linux中一个非常常用的命令,它可以用来实时查看Linux系统的进程信息以及系统性能数据等。其中也包括内存占用情况。在终端输入 top 命令后,会显示以下输出结果:
$ top
top - 08:02:44 up 2:57, 1 user, load average: 0.00, 0.01, 0.03
Tasks: 195 total, 1 running, 193 sleeping, 0 stopped, 1 zombie
%Cpu(s): 1.7 us, 0.7 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7878648 total, 2988332 free, 3556336 used, 1333980 buff/cache
KiB Swap: 8191996 total, 8191996 free, 0 used. 3829644 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2236 root 20 0 1951812 175100 39024 S 0.3 2.2 6:23.08 Xorg
89 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kacpid
91 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kacpi_notify
384 root 20 0 0 0 0 S 0.0 0.0 0:00.03 edac-poller
1027 root 20 0 0 0 0 S 0.0 0.0 0:01.09 ksmtuned
53 root 20 0 0 0 0 S 0.0 0.0 0:54.48 kswapd0
其中,KiB Mem 行显示系统内存总量、可用内存、使用中的内存和缓存的内存,KiB Swap 行显示Swap分区的情况,而第一列 PID 显示所有正在运行的进程的进程ID。%CPU 和 %MEM 两列分别是进程所占用的 CPU 和内存的百分比。
3. vmstat命令
vmstat命令是一个比较强大的系统监测工具,它可以实时监测各种系统性能指标,包括CPU、内存、磁盘I/O以及虚拟内存等。在终端输入 vmstat 命令后,会显示以下输出结果:
$ 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 14848 2513048 1493028 3203088 1 28 280 597 470 810 1 1 97 1 0
其中,第2列 free 显示可用的内存大小,buff 显示缓存内存的大小,cache 显示被文件系统缓存的页面内存大小,swpd 显示 Swap 分区的使用大小,si 和 so 都是换入和换出的大小,bi 和 bo 都是块设备上的输入输出大小。
4. /proc/meminfo文件
/proc/meminfo 是一个虚拟文件,包含了系统运行时各种内存的使用情况和系统信息等。可以使用 cat 命令输出其内容。在终端输入 cat /proc/meminfo 命令后,会显示以下输出结果:
$ cat /proc/meminfo
MemTotal: 7878648 kB
MemFree: 2487376 kB
MemAvailable: 3291020 kB
Buffers: 142492 kB
Cached: 844564 kB
SwapCached: 4696 kB
Active: 4149020 kB
Inactive: 2077392 kB
Active(anon): 1314368 kB
Inactive(anon): 236544 kB
Active(file): 2834652 kB
Inactive(file): 1840848 kB
Unevictable: 9472 kB
Mlocked: 9472 kB
SwapTotal: 8191996 kB
SwapFree: 8191848 kB
Dirty: 48 kB
Writeback: 0 kB
AnonPages: 1461736 kB
Mapped: 485256 kB
Shmem: 541052 kB
Slab: 202068 kB
SReclaimable: 145460 kB
SUnreclaim: 56608 kB
KernelStack: 8416 kB
PageTables: 64664 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 12156320 kB
Committed_AS: 6562960 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 72808 kB
VmallocChunk: 34359661404 kB
HardwareCorrupted: 0 kB
AnonHugePages: 558080 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
其中,MemTotal 行显示系统总内存大小,MemFree 行显示空闲内存大小,Cache 行显示被文件系统缓存的内存大小,Buffers 行显示缓存的内存大小。
5. pmap命令
pmap命令主要用来查看进程的内存占用情况。在终端输入 pmap [PID] 命令后,会显示以下输出结果:
$ pmap 1234
1234: /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid
0000000000400000 144K r-x-- /usr/bin/mysqld_safe
0000000000621000 4400K ----- /usr/bin/mysqld_safe
00007f0ba2560000 4K ----- /usr/bin/mysqld_safe
00007f0ba2561000 132K rw--- /usr/bin/mysqld_safe
00007f0ba2583000 276K rw--- [ anon ]
00007f0ba25c2000 146472K r---- /usr/lib/locale/locale-archive
00007f0ba51a1000 48K r-x-- /usr/lib/mysql/plugin/debug.so
...
其中,第1列是内存段的起始地址,第2列是内存段的大小,第3列是权限信息(读、写、可执行等)以及内存段所对应的文件名或[ anon ]表示匿名映射。
---END---