查看原文
科技教程

Linux内存占用分析的几个方法

Linux学习 2023-07-25

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---


推荐↓↓↓

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存