Linux下内存管理实用命令汇总

1. 介绍

在Linux系统中,内存管理是非常重要的一部分,它负责管理系统中的内存资源,以提供高效的运行环境。在这篇文章中,我们将介绍一些在Linux下常用的内存管理实用命令,并详细解释它们的用法和作用。

2. free命令

free命令用于显示系统的内存使用情况。通过运行free命令,可以查看系统的总内存、已使用内存、空闲内存等信息。

使用方法:

free

执行以上命令后,会输出类似如下的结果:

              total        used        free      shared  buff/cache   available

Mem: 2056684 592892 118504 53512 1337288 1305856

Swap: 2097148 0 2097148

结果中的"total"表示系统的总内存大小,"used"表示已使用的内存大小,"free"表示空闲的内存大小,"buff/cache"表示已缓存的内存大小。

3. top命令

top命令用于实时显示系统的进程和资源使用情况,其中包括内存的使用情况。通过运行top命令,可以查看系统中消耗最多内存的进程。

使用方法:

top

执行以上命令后,会显示类似如下的结果:

top - 13:09:13 up 30 days, 34 min,  3 users,  load average: 0.00, 0.01, 0.05

Tasks: 105 total, 1 running, 104 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 : 2056684 total, 1070784 free, 720048 used, 266852 buff/cache

KiB Swap: 2097148 total, 2060912 free, 36236 used. 1332744 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1 root 20 0 225220 8476 6976 S 0.0 0.4 0:03.58 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0

5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+

在结果中,"KiB Mem"和"KiB Swap"分别表示物理内存和交换空间的使用情况。"VIRT"表示进程使用的虚拟内存大小,"RES"表示进程使用的实际物理内存大小。

4. vmstat命令

vmstat命令用于显示系统的内存、处理器、进程、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

0 0 0 113476 256348 305984 0 0 0 0 0 0 0 0 100 0 0

在结果中,"free"表示空闲内存大小,"buff"表示已缓冲的内存大小,"cache"表示已缓存的内存大小,"swpd"表示已使用的交换空间大小。

5. ps命令

5.1 ps命令介绍

ps命令用于显示系统中当前运行的进程信息。通过运行ps命令,可以查看各个进程消耗的内存大小。

使用方法:

ps aux

执行以上命令后,会输出类似如下的结果:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  

root 1 0.0 0.4 225220 8476 ? Ss Sep23 0:03 /sbin/init

root 2 0.0 0.0 0 0 ? S Sep23 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S Sep23 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< Sep23 0:00 [kworker/0:+]

5.2 按内存使用排序

ps命令可以通过指定不同的参数来排序进程信息,下面的命令将按照内存使用从高到低的顺序显示进程:

ps aux --sort -rss

执行以上命令后,会输出类似如下的结果:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  

user1 1294 0.0 1.3 522440 51992 pts/0 Sl+ Sep23 0:02 gnome-terminal-

user1 7249 0.0 1.1 435848 46560 ? Sl Sep23 0:02 /usr/bin/gnome-he

root 3250 0.0 1.0 76520 41392 ? Sl Sep23 0:00 /usr/sbin/rpcbind

在结果中,"RSS"表示进程使用的物理内存大小。

6. smem命令

smem命令用于统计系统中各个进程的内存使用情况。通过运行smem命令,可以查看每个进程的内存占用情况。

使用方法:

smem -r

执行以上命令后,会输出类似如下的结果:

  PID User     Command                         Swap      USS      RSS

1 root /sbin/init 0 4.0M 8.0M

2 root [kthreadd] 0 0 4.0K

3 root [ksoftirqd/0] 0 0 4.0K

5 root [kworker/0:0H] 0 0 4.0K

在结果中,"USS"表示进程使用的独享内存大小,"RSS"表示进程使用的总内存大小(包括共享内存和独享内存)。

7. pmap命令

pmap命令用于显示进程的内存映射信息。通过运行pmap命令,可以查看进程的内存分配情况。

使用方法:

pmap PID

执行以上命令时,需要将"PID"替换为实际的进程ID(Process ID)。

以进程ID为"1"的init进程为例,执行以下命令:

pmap 1

会输出类似如下的结果:

00056f1e000-00056f63000 r--p 00000000 fc:00 732511    /usr/lib64/locale/locale-archive

00056f63000-00056f65000 rw-p 00005000 fc:00 732511 /usr/lib64/locale/locale-archive

00000037d000-00000037e000 r-xp 00000000 fc:00 734167 /usr/lib64/libfreebl3.so

00000037e000-00000037f000 r--p 00000000 fc:00 734167 /usr/lib64/libfreebl3.so

00000037f000-000000380000 rw-p 00001000 fc:00 734167 /usr/lib64/libfreebl3.so

结果中的每一行表示一个内存映射区段,包括映射区的起始地址、结束地址、权限等信息。

8. numa命令

numa命令用于显示和管理NUMA(Non-Uniform Memory Access)节点的信息。通过运行numa命令,可以查看NUMA节点的分布以及节点上的内存使用情况。

使用方法:

numactl --hardware

执行以上命令后,会输出类似如下的结果:

available: 2 nodes (0)

node 0 cpus: 0 1 2 3

node 0 size: 2047 MB

node 0 free: 1184 MB

node 1 cpus: 4 5 6 7

node 1 size: 2048 MB

node 1 free: 1080 MB

node distances:

node 0 1

0: 10 21

1: 21 10

在结果中,"node"表示NUMA节点的编号,"size"表示节点的总内存大小,"free"表示节点的空闲内存大小。

9. numastat命令

numastat命令用于显示系统中NUMA节点的内存分配情况。通过运行numastat命令,可以查看每个NUMA节点的内存使用情况。

使用方法:

numastat

执行以上命令后,会输出类似如下的结果:

                           node0           node1      : interleave            

numa_hit 1431215712 368202295 : 1073393700

numa_miss 1068 665 : 5501054

numa_foreign 1652 968 : 1546010

numa_interleave 20 6 : 10

numa_local 1561 329021 : 1382220189

numa_other 15 635 : 3669429

在结果中,"node0"和"node1"分别表示NUMA节点0和节点1的内存使用情况。

10. 总结

本文介绍了Linux下一些常用的内存管理实用命令,包括free、top、vmstat、ps、smem、pmap、numa、numastat等命令。通过使用这些命令,可以方便地查看系统的内存使用情况和进程的内存占用情况,以及了解NUMA节点的分布和内存分配情况。这些命令是系统管理员和开发人员在调试和优化系统内存性能时的重要工具。

操作系统标签