Linux内存管理全面指南:分配、使用、监控与优化

Linux内存管理全面指南:分配、使用、监控与优化

一、Linux内存管理概述

1.1 内存管理的基本概念

在Linux系统中,内存管理是操作系统的核心功能之一,负责分配、使用和回收系统内存资源。Linux采用虚拟内存技术,为每个进程提供独立的虚拟地址空间,使应用程序能够高效、安全地使用内存资源[]

虚拟内存技术通过内存管理单元(MMU)和页表,将虚拟地址映射到物理内存位置。这种映射关系由硬件和软件共同维护,为应用程序提供了一个统一的内存视图,隐藏了物理内存的复杂性和碎片化问题[]

Linux内存管理的主要目标包括:

  • 高效分配:确保内存资源能够被快速分配和释放
  • 保护隔离:保证进程间内存相互隔离,防止非法访问
  • 内存扩展:通过交换空间(swap)扩展可用内存
  • 性能优化:通过缓存和预取技术提升内存访问速度

1.2 内存分配的层次结构

Linux内存分配采用多层次结构,从底层到高层依次为:

  1. 物理内存分配:直接操作物理内存,由伙伴系统(Buddy System)管理
  2. 内核内存分配:为内核对象和数据结构分配内存,使用SLAB/SLUB分配器
  3. 用户空间分配:为应用程序分配内存,通过malloc等库函数实现[]

这种分层结构确保了不同类型的内存需求都能得到高效满足,同时保持了系统的稳定性和安全性。

1.3 虚拟地址空间布局

在Linux中,每个进程都有自己的虚拟地址空间,其布局如下:

高地址
┌───────────────────────────────────────────────────────────────────────┐
│ 内核空间 (128TB) ──────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 文件映射区 (共享库、内存映射文件) ─────────────────────────── │
│ 堆 (动态分配内存,向上增长) ─────────────────────────────────── │
│ 未初始化数据段 (BSS) ───────────────────────────────────────── │
│ 已初始化数据段 (DATA) ─────────────────────────────────────── │
│ 程序代码段 (TEXT) ───────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 保留区 ─────────────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 栈 (向下增长) ───────────────────────────────────────────────── │
└───────────────────────────────────────────────────────────────────────┘
低地址

32位系统和64位系统的虚拟地址空间划分有所不同:

  • 32位系统:内核空间1GB,用户空间3GB
  • 64位系统:内核空间和用户空间各128TB[]

二、内存分配机制详解

2.1 用户空间内存分配

在用户空间,应用程序主要通过两种方式分配内存:

2.1.1 brk()系统调用与堆分配

brk()系统调用通过移动堆顶指针来分配内存,适用于小内存分配(通常小于128KB)[]。当应用程序调用malloc()时,如果分配的内存小于128KB,malloc通常会使用brk()来分配内存[]

特点

  • 分配的内存位于堆区
  • 内存释放后不会立即归还操作系统,而是保留在malloc内存池中
  • 适用于频繁分配和释放小内存块的场景[]
2.1.2 mmap()系统调用与内存映射

mmap()系统调用通过在文件映射区创建匿名映射来分配内存,适用于大内存分配(通常大于等于128KB)[]。当malloc()分配的内存大于等于128KB时,会使用mmap()来分配[]

特点

  • 分配的内存位于文件映射区
  • 内存释放后会立即归还操作系统
  • 每次分配都会产生系统调用开销和可能的缺页中断[]
2.1.3 malloc的工作原理

malloc是C标准库中的内存分配函数,它实际上是对brk()和mmap()的封装[]。其工作原理如下:

  1. 当请求分配小内存时(小于128KB),使用brk()从堆分配
  2. 当请求分配大内存时(大于等于128KB),使用mmap()在文件映射区分配
  3. 内存释放时,brk()分配的内存返回内存池,mmap()分配的内存归还操作系统
  4. 内存分配前会尝试重用已释放的内存块,减少系统调用次数[]

示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("使用cat /proc/%d/maps查看内存分配\n", getpid());
    
    // 申请1字节的内存
    void *addr = malloc(1);
    printf("此1字节的内存起始地址:%x\n", addr);
    
    printf("使用cat /proc/%d/maps查看内存分配\n", getpid());
    
    // 释放内存
    free(addr);
    printf("释放了1字节的内存,但heap堆并不会释放\n");
    
    return 0;
}

运行结果显示,尽管只分配了1字节的内存,但实际分配的内存块大小为132KB,这表明malloc会预分配更大的内存池[]

2.2 内核内存分配

2.2.1 伙伴系统(Buddy System)

伙伴系统是Linux内核中最低级别的内存分配机制,负责管理物理内存页[]。它将内存划分为大小为2的幂次的块(如1页、2页、4页等),通过递归分割和合并来分配和释放内存[]

工作原理

  1. 内存以页为单位管理,默认页大小为4KB
  2. 分配时,系统寻找能满足需求的最小块
  3. 如果找不到合适的块,就将较大的块分割为两个"伙伴"
  4. 释放时,检查相邻的伙伴是否空闲,如果是则合并成更大的块[]

API函数

  • alloc_pages(mask, order):分配2^order个页
  • __free_pages(page, order):释放由alloc_pages分配的内存
  • __get_free_pages(mask, order):返回分配内存的虚拟地址
  • free_pages(addr, order):释放由__get_free_pages分配的内存[]
2.2.2 SLAB/SLUB分配器

SLAB分配器是建立在伙伴系统之上的高层内存分配机制,主要用于分配小内存对象[]。SLUB是SLAB的改进版本,目前是大多数Linux发行版的默认选择。

特点

  • 内存以缓存(cache)为单位管理,每个缓存存储相同类型的对象
  • 缓存由多个slab组成,每个slab包含多个对象
  • slabs可以处于三种状态:空(empty)、部分(partial)、满(full)
  • 分配时优先从partial slab中寻找空闲对象,其次是empty slab

SLUB的优势

  • 实现简单,代码量少
  • 减少了元数据开销
  • 更好的多核扩展性
  • 支持对象的构造和析构函数
2.2.3 kmalloc与kzalloc

kmalloc是内核中用于分配内存的主要函数,类似于用户空间的malloc[]。其工作原理如下:

  1. 确定所需内存大小,并向上取整到SLUB缓存的大小
  2. 根据内存大小选择合适的缓存
  3. 从缓存中分配对象,如果缓存中没有可用对象,则从伙伴系统分配新的slab[]

kzalloc是kmalloc的变体,功能与kmalloc相同,但会将分配的内存初始化为零[]

示例:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>

void *ptr;

static int alloc_init(void) {
    size_t size = 1024; // 分配1024字节
    ptr = kmalloc(size, GFP_KERNEL);
    if (!ptr) {
        pr_err("内存分配失败\n");
        return -ENOMEM;
    } else {
        pr_info("内存分配成功\n");
    }
    return 0;
}

static void alloc_exit(void) {
    kfree(ptr);
    pr_info("内存已释放\n");
}

module_init(alloc_init);
module_exit(alloc_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
2.2.4 vmalloc与vfree

vmalloc用于分配虚拟地址连续但物理地址不连续的内存[]。与kmalloc不同,vmalloc分配的内存来自高端内存(high memory),且物理上不连续[]

特点

  • 分配的内存虚拟地址连续,但物理地址不连续
  • 不能用于DMA操作
  • 分配和释放开销较大
  • 适用于分配大内存块且不需要物理连续的场景[]

2.3 内存分配策略

Linux提供了三种不同的内存分配策略,可通过vm.overcommit_memory内核参数配置[]

  1. 启发式超量分配(vm.overcommit_memory=0)(默认)

    • 允许进程超量分配内存,但受内部启发式算法限制
    • 算法考虑可用内存、交换空间和可回收缓存
    • 优点:允许合理的超量分配,提高内存利用率
    • 缺点:可能触发OOM Killer[]
  2. 总是超量提交(vm.overcommit_memory=1)

    • 总是允许内存分配成功,即使系统内存不足
    • 不考虑可用内存和交换空间限制
    • 优点:应用程序不会因内存分配失败而启动失败
    • 缺点:可能导致严重的性能问题和OOM情况[]
  3. 严格超量提交(vm.overcommit_memory=2)

    • 禁止超量分配,内存分配总量不能超过CommitLimit
    • CommitLimit = 物理内存 × overcommit_ratio + 交换空间
    • overcommit_ratio默认值为50%,可通过vm.overcommit_ratio调整
    • 优点:不会触发OOM Killer
    • 缺点:可能导致应用程序无法分配内存,即使系统有空闲内存[]

示例:

# 查看当前内存分配策略
cat /proc/sys/vm/overcommit_memory

# 设置内存分配策略为严格模式
sudo sysctl vm.overcommit_memory=2

# 设置overcommit_ratio为80%
sudo sysctl vm.overcommit_ratio=80

三、内存使用与管理

3.1 进程内存布局

每个Linux进程的虚拟地址空间主要分为以下几个部分:

  1. 代码段(Text Segment):包含程序的可执行代码
  2. 数据段(Data Segment):包含已初始化的全局变量和静态变量
  3. BSS段(BSS Segment):包含未初始化的全局变量和静态变量
  4. 堆(Heap):动态分配的内存区域,由malloc等函数管理
  5. 文件映射区(File Mapping Segment):包含共享库、内存映射文件等
  6. 栈(Stack):包含函数参数、局部变量和返回地址[]

示例:

高地址
┌───────────────────────────────────────────────────────────────────────┐
│ 内核空间 ─────────────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 文件映射区 (共享库、内存映射文件) ─────────────────────────── │
│ 堆 (动态分配内存,向上增长) ─────────────────────────────────── │
│ BSS段 (未初始化数据) ───────────────────────────────────────── │
│ 数据段 (已初始化数据) ─────────────────────────────────────── │
│ 代码段 (程序代码) ───────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 保留区 ─────────────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 栈 (向下增长) ───────────────────────────────────────────────── │
└───────────────────────────────────────────────────────────────────────┘
低地址

3.2 内存使用监控指标

了解内存使用情况对于系统性能优化至关重要。以下是几个关键的内存使用指标:

  1. MemTotal:系统总内存大小
  2. MemFree:空闲内存大小
  3. MemAvailable:可用于分配给进程的内存大小
  4. Buffers:用于缓存文件系统元数据的内存
  5. Cached:用于缓存文件内容的内存
  6. SwapTotal:交换空间总大小
  7. SwapFree:空闲交换空间大小
  8. Active:活跃内存(最近使用过的内存)
  9. Inactive:非活跃内存(长时间未使用的内存)
  10. AnonPages:匿名内存页(未映射到文件的内存)[]

这些指标可以通过/proc/meminfo文件查看,也可以通过freetop等命令获取。

3.3 交换空间(Swap)管理

交换空间是Linux系统在物理内存不足时使用的磁盘空间,作为内存的扩展[]。它允许系统将不活跃的内存页暂时保存到磁盘,腾出物理内存给更需要的进程[]

3.3.1 交换空间的类型

Linux支持两种类型的交换空间:

  1. 交换分区(Swap Partition):专门用于交换的磁盘分区
  2. 交换文件(Swap File):普通文件系统中的文件,用作交换空间[]
3.3.2 swappiness参数

swappiness是一个内核参数(0-100),控制系统将内存页交换到磁盘的倾向[]。默认值通常为60,表示系统在内存使用达到一定程度时,将60%的不活跃内存页交换到磁盘[]

调整swappiness的方法

# 临时调整(重启后失效)
echo 10 > /proc/sys/vm/swappiness

# 永久调整(修改配置文件)
sudo sh -c "echo 'vm.swappiness=10' >> /etc/sysctl.conf"
sudo sysctl -p

建议值

  • 数据库或内存敏感型应用:10-20
  • 内存紧张的服务器:30-50
  • 普通桌面系统:60-70[]
3.3.3 透明大页(Transparent Huge Pages, THP)

透明大页是Linux内核的一项特性,允许系统自动将多个连续的4KB小页合并为2MB或1GB的大页。这可以减少内存管理开销,提高内存密集型应用的性能。

查看透明大页状态

cat /sys/kernel/mm/transparent_hugepage/enabled

禁用透明大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久禁用透明大页

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
chmod +x /etc/rc.local

3.4 内存压缩技术

内存压缩是Linux内核的一项功能,允许系统在物理内存不足时对内存页进行压缩,减少内存使用量[]。这可以减少对交换空间的依赖,提高系统性能[]

内存压缩的工作原理

  1. 当系统内存不足时,内核会尝试压缩不活跃的内存页
  2. 压缩后的内存页存储在特殊的压缩缓存中
  3. 当需要访问这些页时,内核会自动解压缩[]

内存压缩的优点

  • 减少对交换空间的依赖
  • 避免磁盘I/O开销
  • 提高内存使用效率
  • 适用于内存受限的系统[]

四、内存监控工具与方法

4.1 基本内存信息查看

4.1.1 /proc/meminfo文件

/proc/meminfo是Linux系统提供的一个伪文件,包含了系统内存使用情况的详细信息[]。通过读取这个文件,可以获取系统内存的各种指标,如总内存、空闲内存、缓冲区、缓存等[]

示例输出

MemTotal:        8010408 kB
MemFree:          323424 kB
MemAvailable:    6956280 kB
Buffers:          719620 kB
Cached:          5817644 kB
SwapCached:          132 kB
Active:          5415824 kB
Inactive:        1369528 kB
Active(anon):     385660 kB
Inactive(anon):   249292 kB
Active(file):    5030164 kB
Inactive(file):  1120236 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194304 kB
SwapFree:        4193580 kB
Dirty:                60 kB
Writeback:             0 kB
AnonPages:        247888 kB
Mapped:            61728 kB
Shmem:            386864 kB
Slab:             818320 kB
SReclaimable:     788436 kB
SUnreclaim:        29884 kB
KernelStack:        2848 kB
PageTables:         5780 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8199508 kB
Committed_AS:     942596 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       22528 kB
VmallocChunk:   34359707388 kB
HardwareCorrupted:     0 kB
AnonHugePages:     88064 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      176000 kB
DirectMap2M:     6115328 kB
DirectMap1G:     4194304 kB
4.1.2 free命令

free命令是查看系统内存使用情况的常用工具,它提供了对/proc/meminfo文件内容的简洁显示[]free命令可以显示物理内存和交换空间的使用情况,包括总内存、已使用内存、空闲内存、缓冲区和缓存等信息[]

语法

free [选项]

常用选项

  • -b:以字节为单位显示内存
  • -k:以千字节为单位显示内存(默认)
  • -m:以兆字节为单位显示内存
  • -g:以千兆字节为单位显示内存
  • -h:以人类可读的格式显示内存
  • -s <间隔>:持续观察内存使用状况,指定刷新间隔(秒)
  • -t:显示内存总和信息
  • -V:显示版本信息[]

示例输出

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7873         3757         4115           0          1824         7999
Swap:          7999           0         7999

4.2 实时监控工具

4.2.1 top命令

top是Linux系统中最常用的实时监控工具之一,用于动态显示系统进程和资源使用情况[]。它不仅可以查看系统整体的内存使用情况,还可以查看每个进程的内存占用情况[]

语法

top [选项]

常用选项

  • -d <秒>:指定刷新间隔时间
  • -b:以批处理模式运行,适合重定向到文件
  • -n <次数>:指定显示次数后退出
  • -p <PID>:监控特定进程的ID
  • -u <用户>:只显示特定用户的进程[]

示例输出

top - 15:20:30 up  6:57,  5 users,  load average: 0.64, 0.44, 0.33
Tasks: 265 total,   1 running, 263 sleeping,   0 stopped,   1 zombie
%Cpu(s):  7.8 us,  2.4 sy,  0.0 ni, 88.9 id,  0.9 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8167848 total,  6642360 used,  1525488 free,  1026876 buffers
KiB Swap:  1998844 total,        0 used,  1998844 free,  2138148 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
2986 enlighte  20   0  584m  42m  26m S  14.3  0.5   0:44.27 yakuake
1305 root      20   0  448m  68m  39m S   5.0  0.9   3:33.98 Xorg
7701 enlighte  20   0  424m  17m  10m S   4.0  0.2   0:00.12 kio_thumbnail

top界面中,可以通过以下按键进行交互:

  • M:按内存使用量排序进程
  • P:按CPU使用率排序进程
  • T:按运行时间排序进程
  • c:切换显示完整命令行
  • k:终止指定进程
  • q:退出top[]
4.2.2 htop命令

htoptop命令的增强版本,提供了更友好的用户界面和更多功能[]。它支持颜色高亮、鼠标操作、进程树视图等功能,是系统监控的理想工具[]

安装方法

# 在Ubuntu/Debian上
sudo apt install htop

# 在CentOS/RHEL上
sudo yum install htop

功能特点

  • 支持鼠标操作
  • 显示完整的命令行
  • 垂直和水平滚动
  • 进程树视图
  • 颜色高亮显示不同类型的进程
  • 更直观的CPU、内存使用情况显示[]

示例输出

htop
CPU[||||||||||||||||||||||| 2.78%] Tasks: 38, 91 thr; 1 running
Mem[||||||||||||||||||||||| 5.38%] Load average: 0.05 0.05 0.05
Swp[                                        0%] Uptime: 397 days(!), 04:32:40

PID USER      PRI NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
  1 root      20   0 113M 3368K 2512K S 0.0  0.0  8:04.57 -bash
2292 root      20   0 43244 1796K 1216K S 0.0  0.0 22:18.15 /usr/lib/systemd/systemd --system --deserialize 20
28058 root     20   0 42040 3368K 2512K S 0.0  0.4 22:18.15 /usr/sbin/aliyun-service
28059 root     20   0 42040 3368K 2512K S 0.0  0.4 21:51.17 /usr/sbin/aliyun-service
28060 root     20   0 42040 3368K 2512K S 0.0  0.4 24:09.85 /usr/sbin/aliyun-service
25431 nscd      20   0 644M 1752K 1216K S 0.0  0.0 39:12.35 /usr/sbin/nscd
25432 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:23.37 /usr/sbin/nscd
25433 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.20 /usr/sbin/nscd
25434 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.21 /usr/sbin/nscd
25435 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.19 /usr/sbin/nscd
25436 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.18 /usr/sbin/nscd
25437 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.18 /usr/sbin/nscd
25438 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.16 /usr/sbin/nscd
22662 root      20   0 125M 1796K 1216K S 0.0  0.0  0:01.82 /usr/sbin/crond -n
22663 root      20   0 125M 1796K 1216K S 0.0  0.0  0:02.16 nginx: master process nginx
22664 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process
22665 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process
22666 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process
4.2.3 vmstat命令

vmstat是一个报告虚拟内存统计信息的工具,提供有关进程、内存、分页、块IO、捕获和CPU活动的一般信息[]。它可以帮助识别系统瓶颈和内存问题[]

语法

vmstat [选项] [延迟 [次数]]

常用选项

  • -a:显示活动和非活动内存
  • -f:显示启动后创建的进程总数
  • -m:显示slabinfo
  • -n:只在开始时显示一次标题
  • -s:以表格形式显示统计信息
  • -d:显示磁盘统计信息
  • -p:显示指定分区的统计信息[]

示例输出

[root@FZCTP-DB ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 2121472 907312   1040 58008452    0    0     2     3    0    0  1  1 98  0  0
 1  0 2121472 908048   1040 58008424    0    0     0   559 11005 8373  0  1 97  0  2
 2  0 2121472 906636   1040 58008440    0    0     0   202 3799 4088  0  0 99  0  0
 0  0 2121472 909344   1040 58008444    0    0     0   328 2423 3291  0  0 100  0  0

4.3 高级监控工具

4.3.1 glances命令

glances是一个用Python编写的跨平台系统监控工具,提供了丰富的系统信息,包括CPU使用情况、内存使用情况、进程信息、网络接口、磁盘I/O等[]。它支持多种输出格式,包括终端界面、Web界面等[]

安装方法

# 在Ubuntu/Debian上
sudo apt install glances

# 或者使用pip安装
sudo pip3 install glances

语法

glances [选项]

常用选项

  • -b:以字节为单位显示网络流量
  • -d:不显示磁盘信息
  • -f:指定输出文件的目录
  • -h:显示帮助信息
  • -m:不显示文件系统信息
  • -n:不显示网络信息
  • -o:指定输出格式(HTML或CSV)
  • -s:以服务器模式运行
  • -c <IP>:以客户端模式连接到指定服务器[]

示例输出

localhost.localdomain (CentOS 6.6 64bit / Linux 2.6.32-504.e16.x86_64)

CPU: 1.8%  Load 2-core: 1 min: 0.07 5 mins: 0.02 15 mins: 0.00
Mem: total: 989M  used: 205M  free: 784M  active: 191M  inactive: 239M  buffers: 72.2M  cached: 332M
Swap: total: 2.0G  used: 0B  free: 2.0G

Network: Rx/s: 4Kb  Tx/s: 108Kb
Disk I/o: In/s: 0  Out/s: 0

Tasks: 120 (133 thr), 1 run, 119 slp, 0 oth  sorted automatically

VIRT   RES   CPU%  MEM%   PID  USER  NI  S  TIME+  IOR/s  IO
211M  13M   3.8   1.3   5256  root  0  R 0:03.43  0
19M   2M    0.0   0.0     1  root  0  S 0:01.83  0
0      0     0.0   0.0     2  root  0  S 0:00.30  0
0      0     0.0   0.0     3  root  0  S 0:00.80  0
0      0     0.0   0.0     4  root  0  S 0:00.80  0
0      0     0.0   0.0     5  root  0  S 0:00.00  0
0      0     0.0   0.0     6  root  0  S 0:00.50  0
4.3.2 dstat命令

dstat是一个多功能的系统资源统计工具,可以替代vmstatiostatifstat等多个命令[]。它提供了丰富的统计信息,包括CPU、内存、磁盘、网络、进程等方面的使用情况[]

安装方法

# 在Ubuntu/Debian上
sudo apt install dstat

# 在CentOS/RHEL上
sudo yum install dstat

语法

dstat [选项] [延迟 [次数]]

常用选项

  • -a:显示所有默认统计信息(cpu、disk、net、page、system)
  • -c:仅显示CPU统计信息
  • -d:仅显示磁盘统计信息
  • -m:仅显示内存统计信息
  • -n:仅显示网络统计信息
  • -p:仅显示进程统计信息
  • -r:仅显示I/O请求统计信息
  • -s:仅显示交换分区统计信息
  • -t:显示时间戳
  • --top-cpu:显示最占用CPU的进程
  • --top-mem:显示最消耗内存的进程[]

示例输出

[root@localhost ~]# dstat -m 1 2
----memory-usage----
used  buff   cache   free
198M  65.3M  619M   106M
198M  65.3M  619M   106M
4.3.3 smem命令

smem是一个专门用于分析内存使用情况的工具,它可以报告比例集大小(PSS)、唯一集大小(USS)和常驻集大小(RSS)[]。这些指标比传统的RSS更准确地反映了进程的内存使用情况[]

安装方法

# 在Ubuntu/Debian上
sudo apt install smem

# 在CentOS/RHEL上
sudo yum install smem

语法

smem [选项]

常用选项

  • -a:显示所有内存使用情况
  • -d:按进程深度排序
  • -k:按进程ID排序
  • -p:按进程名称排序
  • -s:按内存使用量排序
  • -t:显示汇总信息
  • -u:按用户排序[]

示例输出

[root@sharplee creatfile]# smem -tk
User      PID    PPID  VmSize  Rss Pss USS Command
root        1       0   113M 3368K 2512K 1216K /usr/lib/systemd/systemd --system --deserialize 20
root        2       0      0     0     0     0 [kthreadd]
root        3       2      0     0     0     0 [ksoftirqd/0]
root        5       2      0     0     0     0 [kworker/0:0H]
root        7       2      0     0     0     0 [migration/0]
root        8       2      0     0     0     0 [rcu_bh]
root        9       2      0     0     0     0 [rcuob/0]
root       10       2      0     0     0     0 [rcuob/1]
root       11       2      0     0     0     0 [rcuob/2]
root       12       2      0     0     0     0 [rcuob/3]
root       13       2      0     0     0     0 [rcuob/4]
root       14       2      0     0     0     0 [rcuob/5]
root       15       2      0     0     0     0 [rcuob/6]
root       16       2      0     0     0     0 [rcuob/7]
root       17       2      0     0     0     0 [watchdog/0]
root       18       2      0     0     0     0 [watchdog/1]
root       19       2      0     0     0     0 [kdevtmpfs]
root       20       2      0     0     0     0 [netns]
root       21       2      0     0     0     0 [khungtaskd]
root       22       2      0     0     0     0 [writeback]
root       23       2      0     0     0     0 [kintegrityd]
root       24       2      0     0     0     0 [bioset]
root       25       2      0     0     0     0 [kblockd]
root       26       2      0     0     0     0 [ata_sff]
root       27       2      0     0     0     0 [md]
root       28       2      0     0     0     0 [devfreq_wq]
root       29       2      0     0     0     0 [watchdogd]
root       30       2      0     0     0     0 [kswapd0]
root       31       2      0     0     0     0 [ksmd]
root       32       2      0     0     0     0 [khugepaged]
root       33       2      0     0     0     0 [fsnotify_mark]
root       34       2      0     0     0     0 [ecryptfs-kthrea]
root       35       2      0     0     0     0 [crypto]
root       36       2      0     0     0     0 [kthrotld]
root       37       2      0     0     0     0 [kmpath_rdacd]
root       38       2      0     0     0     0 [kaluad]
root       39       2      0     0     0     0 [kdmflush]
root       40       2      0     0     0     0 [kdmflush]
root       41       2      0     0     0     0 [kdmflush]
root       42       2      0     0     0     0 [kdmflush]
root       43       2      0     0     0     0 [kdmflush]
root       44       2      0     0     0     0 [kdmflush]
root       45       2      0     0     0     0 [kdmflush]
root       46       2      0     0     0     0 [kdmflush]
root       47       2      0     0     0     0 [kdmflush]
root       48       2      0     0     0     0 [kdmflush]
root       49       2      0     0     0     0 [kdmflush]
root       50       2      0     0     0     0 [kdmflush]
root       51       2      0     0     0     0 [kdmflush]
root       52       2      0     0     0     0 [kdmflush]
root       53       2      0     0     0     0 [kdmflush]
root       54       2      0     0     0     0 [kdmflush]
root       55       2      0     0     0     0 [kdmflush]
root       56       2      0     0     0     0 [kdmflush]
root       57       2      0     0     0     0 [kdmflush]
root       58       2      0     0     0     0 [kdmflush]
root       59       2      0     0     0     0 [kdmflush]
root       60       2      0     0     0     0 [kdmflush]
root       61       2      0     0     0     0 [kdmflush]
root       62       2      0     0     0     0 [kdmflush]
root       63       2      0     0     0     0 [kdmflush]
root       64       2      0     0     0     0 [kdmflush]
root       65       2      0     0     0     0 [kdmflush]
root       66       2      0     0     0     0 [kdmflush]
root       67       2      0     0     0     0 [kdmflush]
root       68       2      0     0     0     0 [kdmflush]
root       69       2      0     0     0     0 [kdmflush]
root       70       2      0     0     0     0 [kdmflush]
root       71       2      0     0     0     0 [kdmflush]
root       72       2      0     0     0     0 [kdmflush]
root       73       2      0     0     0     0 [kdmflush]
root       74       2      0     0     0     0 [kdmflush]
root       75       2      0     0     0     0 [kdmflush]
root       76       2      0     0     0     0 [kdmflush]
root       77       2      0     0     0     0 [kdmflush]
root       78       2      0     0     0     0 [kdmflush]
root       79       2      0     0     0     0 [kdmflush]
root       80       2      0     0     0     0 [kdmflush]
root       81       2      0     0     0     0 [kdmflush]
root       82       2      0     0     0     0 [kdmflush]
root       83       2      0     0     0     0 [kdmflush]
root       84       2      0     0     0     0 [kdmflush]
root       85       2      0     0     0     0 [kdmflush]
root       86       2      0     0     0     0 [kdmflush]
root       87       2      0     0     0     0 [kdmflush]
root       88       2      0     0     0     0 [kdmflush]
root       89       2      0     0     0     0 [kdmflush]
root       90       2      0     0     0     0 [kdmflush]
root       91       2      0     0     0     0 [kdmflush]
root       92       2      0     0     0     0 [kdmflush]
root       93       2      0     0     0     0 [kdmflush]
root       94       2      0     0     0     0 [kdmflush]
root       95       2      0     0     0     0 [kdmflush]
root       96       2      0     0     0     0 [kdmflush]
root       97       2      0     0     0     0 [kdmflush]
root       98       2      0     0     0     0 [kdmflush]
root       99       2      0     0     0     0 [kdmflush]
root      100       2      0     0     0     0 [kdmflush]
root      101       2      0     0     0     0 [kdmflush]
root      102       2      0     0     0     0 [kdmflush]
root      103       2      0     0     0     0 [kdmflush]
root      104       2      0     0     0     0 [kdmflush]
root      105       2      0     0     0     0 [kdmflush]
root      106       2      0     0     0     0 [kdmflush]
root      107       2      0     0     0     0 [kdmflush]
root      108       2      0     0     0     0 [kdmflush]
root      109       2      0     0     0     0 [kdmflush]
root      110       2      0     0     0     0 [kdmflush]
root      111       2      0     0     0     0 [kdmflush]
root      112       2      0     0     0     0 [kdmflush]
root      113       2      0     0     0     0 [kdmflush]
root      114       2      0     0     0     0 [kdmflush]
root      115       2      0     0     0     0 [kdmflush]
root      116       2      0     0     0     0 [kdmflush]
root      117       2      0     0     0     0 [kdmflush]
root      118       2      0     0     0     0 [kdmflush]
root      119       2      0     0     0     0 [kdmflush]
root      120       2      0     0     0     0 [kdmflush]
root      121       2      0     0     0     0 [kdmflush]
root      122       2      0     0     0     0 [kdmflush]
root      123       2      0     0     0     0 [kdmflush]
root      124       2      0     0     0     0 [kdmflush]
root      125       2      0     0     0     0 [kdmflush]
root      126       2      0     0     0     0 [kdmflush]
root      127       2      0     0     0     0 [kdmflush]
root      128       2      0     0     0     0 [kdmflush]
root      129       2      0     0     0     0 [kdmflush]
root      130       2      0     0     0     0 [kdmflush]
root      131       2      0     0     0     0 [kdmflush]
root      132       2      0     0     0     0 [kdmflush]
root      133       2      0     0     0     0 [kdmflush]
root      134       2      0     0     0     0 [kdmflush]
root      135       2      0     0     0     0 [kdmflush]
root      136       2      0     0     0     0 [kdmflush]
root      137       2      0     0     0     0 [kdmflush]
root      138       2      0     0     0     0 [kdmflush]
root      139       2      0     0     0     0 [kdmflush]
root      140       2      0     0     0     0 [kdmflush]
root      141       2      0     0     0     0 [kdmflush]
root      142       2      0     0     0     0 [kdmflush]
root      143       2      0     0     0     0 [kdmflush]
root      144       2      0     0     0     0 [kdmflush]
root      145       2      0     0     0     0 [kdmflush]
root      146       2      0     0     0     0 [kdmflush]
root      147       2      0     0     0     0 [kdmflush]
root      148       2      0     0     0     0 [kdmflush]
root      149       2      0     0     0     0 [kdmflush]
root      150       2      0     0     0     0 [kdmflush]
root      151       2      0     0     0     0 [kdmflush]
root      152       2      0     0     0     0 [kdmflush]
root      153       2      0     0     0     0 [kdmflush]
root      154       2      0     0     0     0 [kdmflush]
root      155       2      0     0     0     0 [kdmflush]
root      156       2      0     0     0     0 [kdmflush]
root      157       2      0     0     0     0 [kdmflush]
root      158       2      0     0     0     0 [kdmflush]
root      159       2      0     0     0     0 [kdmflush]
root      160       2      0     0     0     0 [kdmflush]
root      161       2      0     0     0     0 [kdmflush]
root      162       2      0     0     0     0 [kdmflush]
root      163       2      0     0     0     0 [kdmflush]
root      164       2      0     0     0     0 [kdmflush]
root      165       2      0     0     0     0 [kdmflush]
root      166       2      0     0     0     0 [kdmflush]
root      167       2      0     0     0     0 [kdmflush]
root      168       2      0     0     0     0 [kdmflush]
root      169       2      0     0     0     0 [kdmflush]
root      170       2      0     0     0     0 [kdmflush]
root      171       2      0     0     0     0 [kdmflush]
root      172       2      0     0     0     0 [kdmflush]
root      173       2      0     0     0     0 [kdmflush]
root      174       2      0     0     0     0 [kdmflush]
root      175       2      0     0     0     0 [kdmflush]
root      176       2      0     0     0     0 [kdmflush]
root      177       2      0     0     0     0 [kdmflush]
root      178       2      0     0     0     0 [kdmflush]
root      179       2      0     0     0     0 [kdmflush]
root      180       2      0     0     0     0 [kdmflush]
root      181       2      0     0     0     0 [kdmflush]
root      182       2      0     0     0     0 [kdmflush]
root      183       2      0     0     0     0 [kdmflush]
root      184       2      0     0     0     0 [kdmflush]
root      185       2      0     0     0     0 [kdmflush]
root      186       2      0     0     0     0 [kdmflush]
root      187       2      0     0     0     0 [kdmflush]
root      188       2      0     0     0     0 [kdmflush]
root      189       2      0     0     0     0 [kdmflush]
root      190       2      0     0     0     0 [kdmflush]
root      191       2      0     0     0     0 [kdmflush]
root      192       2      0     0     0     0 [kdmflush]
root      193       2      0     0     0     0 [kdmflush]
root      194       2      0     0     0     0 [kdmflush]
root      195       2      0     0     0     0 [kdmflush]
root      196       2      0     0     0     0 [kdmflush]
root      197       2      0     0     0     0 [kdmflush]
root      198       2      0     0     0     0 [kdmflush]
root      199       2      0     0     0     0 [kdmflush]
root      200       2      0     0     0     0 [kdmflush]
root      201       2      0     0     0     0 [kdmflush]
root      202       2      0     0     0     0 [kdmflush]
root      203       2      0     0     0     0 [kdmflush]
root      204       2      0     0     0     0 [kdmflush]
root      205       2      0     0     0     0 [kdmflush]
root      206       2      0     0     0     0 [kdmflush]
root      207       2      0     0     0     0 [kdmflush]
root      208       2      0     0     0     0 [kdmflush]
root      209       2      0     0     0     0 [kdmflush]
root      210       2      0     0     0     0 [kdmflush]
root      211       2      0     0     0     0 [kdmflush]
root      212       2      0     0     0     0 [kdmflush]
root      213       2      0     0     0     0 [kdmflush]
root      214       2      0     0     0     0 [kdmflush]
root      215       2      0     0     0     0 [kdmflush]
root      216       2      0     0     0     0 [kdmflush]
root      217       2      0     0     0     0 [kdmflush]
root      218       2      0     0     0     0 [kdmflush]
root      219       2      0     0     0     0 [kdmflush]
root      220       2      0     0     0     0 [kdmflush]
root      221       2      0     0     0     0 [kdmflush]
root      222       2      0     0     0     0 [kdmflush]
root      223       2      0     0     0     0 [kdmflush]
root      224       2      0     0     0     0 [kdmflush]
root      225       2      0     0     0     0 [kdmflush]
root      226       2      0     0     0     0 [kdmflush]
root      227       2      0     0     0     0 [kdmflush]
root      228       2      0     0     0     0 [kdmflush]
root      229       2      0     0     0     0 [kdmflush]
root      230       2      0     0     0     0 [kdmflush]
root      231       2      0     0     0     0 [kdmflush]
root      232       2      0     0     0     0 [kdmflush]
root      233       2      0     0     0     0 [kdmflush]
root      234       2      0     0     0     0 [kdmflush]
root      235       2      0     0     0     0 [kdmflush]
root      236       2      0     0     0     0 [kdmflush]
root      237       2      0     0     0     0 [kdmflush]
root      238       2      0     0     0     0 [kdmflush]
root      239       2      0     0     0     0 [kdmflush]
root      240       2      0     0     0     0 [kdmflush]
root      241       2      0     0     0     0 [kdmflush]
root      242       2      0     0     0     0 [kdmflush]
root      243       2      0     0     0     0 [kdmflush]
root      244       2      0     0     0     0 [kdmflush]
root      245       2      0     0     0     0 [kdmflush]
root      246       2      0     0     0     0 [kdmflush]
root      247       2      0     0     0     0 [kdmflush]
root      248       2      0     0     0     0 [kdmflush]
root      249       2      0     0     0     0 [kdmflush]
root      250       2      0     0     0     0 [kdmflush]
root      251       2      0     0     0     0 [kdmflush]
root      252       2      0     0     0     0 [kdmflush]
root      253       2      0     0     0     0 [kdmflush]
root      254       2      0     0     0     0 [kdmflush]
root      255       2      0     0     0     0 [kdmflush]
root      256       2      0     0     0     0 [kdmflush]
root      257       2      0     0     0     0 [kdmflush]
root      258       2      0     0     0     0 [kdmflush]
root      259       2      0     0     0     0 [kdmflush]
root      260       2      0     0     0     0 [kdmflush]
root      261       2      0     0     0     0 [kdmflush]
root      262       2      0     0     0     0 [kdmflush]
root      263       2      0     0     0     0 [kdmflush]
root      264       2      0     0     0     0 [kdmflush]
root      265       2      0     0     0     0 [kdmflush]
root      266       2      0     0     0     0 [kdmflush]
root      267       2      0     0     0     0 [kdmflush]
root      268       2      0     0     0     0 [kdmflush]
root      269       2      0     0     0     0 [kdmflush]
root      270       2      0     0     0     0 [kdmflush]
root      271       2      0     0     0     0 [kdmflush]
root      272       2      0     0     0     0 [kdmflush]
root      273       2      0     0     0     0 [kdmflush]
root      274       2      0     0     0     0 [kdmflush]
root      275       2      0     0     0     0 [kdmflush]
root      276       2      0     0     0     0 [kdmflush]
root      277       2      0     0     0     0 [kdmflush]
root      278       2      0     0     0     0 [kdmflush]
root      279       2      0     0     0     0 [kdmflush]
root      280       2      0     0     0     0 [kdmflush]
root      281       2      0     0     0     0 [kdmflush]
root      282       2      0     0     0     0 [kdmflush]
root      283       2      0     0     0     0 [kdmflush]
root      284       2      0     0     0     0 [kdmflush]
root      285       2      0     0     0     0 [kdmflush]
root      286       2      0     0     0     0 [kdmflush]
root      287       2      0     0     0     0 [kdmflush]
root      288       2      0     0     0     0 [kdmflush]
root      289       2      0     0     0     0 [kdmflush]
root      290       2      0     0     0     0 [kdmflush]
root      291       2      0     0     0     0 [kdmflush]
root      292       2      0     0     0     0 [kdmflush]
root      293       2      0     0     0     0 [kdmflush]
root      294       2      0     0     0     0 [kdmflush]
root      295       2      0     0     0     0 [kdmflush]
root      296       2      0     0     0     0 [kdmflush]
root      297       2      0     0     0     0 [kdmflush]
root      298       2      0     0     0     0 [kdmflush]
root      299       2      0     0     0     0 [kdmflush]
root      300       2      0     0     0     0 [kdmflush]
root      301       2      0     0     0     0 [kdmflush]
root      302       2      0     0     0     0 [kdmflush]
root      303       2      0     0     0     0 [kdmflush]
root      304       2      0     0     0     0 [kdmflush]
root      305       2      0     0     0     0 [kdmflush]
root      306       2      0     0     0     0 [kdmflush]
root      307       2      0     0     0     0 [kdmflush]
root      308       2      0     0     0     0 [kdmflush]
root      309       2      0     0     0     0 [kdmflush]
root      310       2      0     0     0     0 [kdmflush]
root      311       2      0     0     0     0 [kdmflush]
root      312       2      0     0     0     0 [kdmflush]
root      313       2      0     0     0     0 [kdmflush]
root      314       2      0     0     0     0 [kdmflush]
root      315       2      0     0     0     0 [kdmflush]
root      316       2      0     0     0     0 [kdmflush]
root      317       2      0     0     0     0 [kdmflush]
root      318       2      0     0     0     0 [kdmflush]
root      319       2      0     0     0     0 [kdmflush]
root      320       2      0     0     0     0 [kdmflush]
root      321       2      0     0     0     0 [kdmflush]
root      322       2      0     0     0     0 [kdmflush]
root      323       2      0     0     0     0 [kdmflush]
root      324       2      0     0     0     0 [kdmflush]
root      325       2      0     0     0     0 [kdmflush]
root      326       2      0     0     0     0 [kdmflush]
root      327       2      0     0     0     0 [kdmflush]
root      328       2      0     0     0     0 [kdmflush]
root      329       2      0     0     0     0 [kdmflush]
root      330       2      0     0     0     0 [kdmflush]
root      331       2      0     0     0     0 [kdmflush]
root      332       2      0     0     0     0 [kdmflush]
root      333       2      0     0     0     0 [kdmflush]
root      334       2      0     0     0     0 [kdmflush]
root      335       2      0     0     0     0 [kdmflush]
root      336       2      0     0     0     0 [kdmflush]
root      337       2      0     0     0     0 [kdmflush]
root      338       2      0     0     0     0 [kdmflush]
root      339       2      0     0     0     0 [kdmflush]
root      340       2      0     0     0     0 [kdmflush]
root      341       2      0     0     0     0 [kdmflush]
root      342       2      0     0     0     0 [kdmflush]
root      343       2      0     0     0     0 [kdmflush]
root      344       2      0     0     0     0 [kdmflush]
root      345       2      0     0     0     0 [kdmflush]
root      346       2      0     0     0     0 [kdmflush]
root      347       2      0     0     0     0 [kdmflush]
root      348       2      0     0     0     0 [kdmflush]
root      349       2      0     0     0     0 [kdmflush]
root      350       2      0     0     0     0 [kdmflush]
root      351       2      0     0     0     0 [kdmflush]
root      352       2      0     0     0     0 [kdmflush]
root      353       2      0     0     0     0 [kdmflush]
root      354       2      0     0     0     0 [kdmflush]
root      355       2      0     0     0     0 [kdmflush]
root      356       2      0     0     0     0 [kdmflush]
root      357       2      0     0     0     0 [kdmflush]
root      358       2      0     0     0     0 [kdmflush]
root      359       2      0     0     0     0 [kdmflush]
root      360       2      0     0     0     0 [kdmflush]
root      361       2      0     0     0     0 [kdmflush]
root      362       2      0     0     0     0 [kdmflush]
root      363       2      0     0     0     0 [kdmflush]
root      364       2      0     0     0     0 [kdmflush]
root      365       2      0     0     0     0 [kdmflush]
root      366       2      0     0     0     0 [kdmflush]
root      367       2      0     0     0     0 [kdmflush]
root      368       2      0     0     0     0 [kdmflush]
root      369       2      0     0     0     0 [kdmflush]
root      370       2      0     0     0     0 [kdmflush]
root      371       2      0     0     0     0 [kdmflush]
root      372       2      0     0     0     0 [kdmflush]
root      373       2      0     0     0     0 [kdmflush]
root      374       2      0     0     0     0 [kdmflush]
root      375       2      0     0     0     0 [kdmflush]
root      376       2      0     0     0     0 [kdmflush]
root      377       2      0     0     0     0 [kdmflush]
root      378       2      0     0     0     0 [kdmflush]
root      379       2      0     0     0     0 [kdmflush]
root      380       2      0     0     0     0 [kdmflush]
root      381       2      0     0     0     0 [kdmflush]
root      382       2      0     0     0     0 [kdmflush]
root      383       2      0     0     0     0 [kdmflush]
root      384       2      0     0     0     0 [kdmflush]
root      385       2      0     0     0     0 [kdmflush]
root      386       2      0     0     0     0 [kdmflush]
root      387       2      0     0     0     0 [kdmflush]
root      388       2      0     0     0     0 [kdmflush]
root      389       2      0     0     0     0 [kdmflush]
root      390       2      0     0     0     0 [kdmflush]
root      391       2      0     0     0     0 [kdmflush]
root      392       2      0     0     0     0 [kdmflush]
root      393       2      0     0     0     0 [kdmflush]
root      394       2      0     0     0     0 [kdmflush]
root      395       2      0     0     0     0 [kdmflush]
root      396       2      0     0     0     0 [kdmflush]
root      397       2      0     0     0     0 [kdmflush]
root      398       2      0     0     0     0 [kdmflush]
root      399       2      0     0     0     0 [kdmflush]
root      400       2      0     0     0     0 [kdmflush]
root      401       2      0     0     0     0 [kdmflush]
root      402       2      0     0     0     0 [kdmflush]
root      403       2      0     0     0     0 [kdmflush]
root      404       2      0     0     0     0 [kdmflush]
root      405       2      0     0     0     0 [kdmflush]
root      406       2      0     0     0     0 [kdmflush]
root      407       2      0     0     0     0 [kdmflush]
root      408       2      0     0     0     0 [kdmflush]
root      409       2      0     0     0     0 [kdmflush]
root      410       2      0     0     0     0 [kdmflush]
root      411       2      0     0     0     0 [kdmflush]
root      412       2      0     0     0     0 [kdmflush]
root      413       2      0     0     0     0 [kdmflush]
root      414       2      0     0     0     0 [kdmflush]
root      415       2      0     0     0     0 [kdmflush]
root      416       2      0     0     0     0 [kdmflush]
root      417       2      0     0     0     0 [kdmflush]
root      418       2      0     0     0     0 [kdmflush]
root      419       2      0     0     0     0 [kdmflush]
root      420       2      0     0     0     0 [kdmflush]
root      421       2      0     0     0     0 [kdmflush]
root      422       2      0     0     0     0 [kdmflush]
root      423       2      0     0     0     0 [kdmflush]
root      424       2      0     0     0     0 [kdmflush]
root      425       2      0     0     0     0 [kdmflush]
root      426       2      0     0     0     0 [kdmflush]
root      427       2      0     0     0     0 [kdmflush]
root      428       2      0     0     0     0 [kdmflush]
root      429       2      0     0     0     0 [kdmflush]
root      430       2      0     0     0     0 [kdmflush]
root      431       2      0     0     0     0 [kdmflush]
root      432       2      0     0     0     0 [kdmflush]
root      433       2      0     0     0     0 [kdmflush]
root      434       2      0     0     0     0 [kdmflush]
root      435       2      0     0     0     0 [kdmflush]
root      436       2      0     0     0     0 [kdmflush]
root      437       2      0     0     0     0 [kdmflush]
root      438       2      0     0     0     0 [kdmflush]
root      439       2      0     0     0     0 [kdmflush]
root      440       2      0     0     0     0 [kdmflush]
root      441       2      0     0     0     0 [kdmflush]
root      442       2      0     0     0     0 [kdmflush]
root      443       2      0     0     0     0 [kdmflush]
root      444       2      0     0     0     0 [kdmflush]
root      445       2      0     0     0     0 [kdmflush]
root      446       2      0     0     0     0 [kdmflush]
root      447       2      0     0     0     0 [kdmflush]
root      448       2      0     0     0     0 [kdmflush]
root      449       2      0     0     0     0 [kdmflush]
root      450       2      0     0     0     0 [kdmflush]
root      451       2      0     0     0     0 [kdmflush]
root      452       2      0     0     0     0 [kdmflush]
root      453       2      0     0     0     0 [kdmflush]
root      454       2      0     0     0     0 [kdmflush]
root      455       2      0     0     0     0 [kdmflush]
root      456       2      0     0     0     0 [kdmflush]
root      457       2      0     0     0     0 [kdmflush]
root      458       2      0     0     0     0 [kdmflush]
root      459       2      0     0     0     0 [kdmflush]
root      460       2      0     0     0     0 [kdmflush]
root      461       2      0     0     0     0 [kdmflush]
root      462       2      0     0     0     0 [kdmflush]
root      463       2      0     0     0     0 [kdmflush]
root      464       2      0     0     0     0 [kdmflush]
root      465       2      0     0     0     0 [kdmflush]
root      466       2      0     0     0     0 [kdmflush]
root      467       2      0     0     0     0 [kdmflush]
root      468       2      0     0     0     0 [kdmflush]
root      469       2      0     0     0     0 [kdmflush]
root      470       2      0     0     0     0 [kdmflush]
root      471       2      0     0     0     0 [kdmflush]
root      472       2      0     0     0     0 [kdmflush]
root      473       2      0     0     0     0 [kdmflush]
root      474       2      0     0     0     0 [kdmflush]
root      475       2      0     0     0     0 [kdmflush]
root      476       2      0     0     0     0 [kdmflush]
root      477       2      0     0     0     0 [kdmflush]
root      478       2      0     0     0     0 [kdmflush]
root      479       2      0     0     0     0 [kdmflush]
root      480       2      0     0     0     0 [kdmflush]
root      481       2      0     0     0     0 [kdmflush]
root      482       2      0     0     0     0 [kdmflush]
root      483       2      0     0     0     0 [kdmflush]
root      484       2      0     0     0     0 [kdmflush]
root      485       2      0     0     0     0 [kdmflush]
root      486       2      0     0     0     0 [kdmflush]
root      487       2      0     0     0     0 [kdmflush]
root      488       2      0     0     0     0 [kdmflush]
root      489       2      0     0     0     0 [kdmflush]
root      490       2      0     0     0     0 [kdmflush]
root      491       2      0     0     0     0 [kdmflush]
root      492       2      0     0     0     0 [kdmflush]
root      493       2      0     0     0     0 [kdmflush]
root      494       2      0     0     0     0 [kdmflush]
root      495       2      0     0     0     0 [kdmflush]
root      496       2      0     0     0     0 [kdmflush]
root      497       2      0     0     0     0 [kdmflush]
root      498       2      0     0     0     0 [kdmflush]
root      499       2      0     0     0     0 [kdmflush]
root      500       2      0     0     0     0 [kdmflush]
4.3.4 btop命令

btop是一个现代的系统监控工具,是传统top命令的替代品,提供了更丰富的功能和更友好的用户界面[]。它支持鼠标操作、进程树视图、多种排序方式等功能[]

安装方法

# 使用Snap安装(推荐)
sudo snap install btop

# 或者使用APT安装
curl -s https://packagecloud.io/install/repositories/linuxserver/btop/script.deb.sh | sudo bash
sudo apt update
sudo apt install btop

功能特点

  • 显示CPU、内存、磁盘、网络使用情况
  • 支持进程树视图
  • 支持鼠标操作
  • 多种排序方式(按CPU、内存、进程名等)
  • 支持主题切换
  • 显示系统负载和运行时间[]

示例输出

btop界面展示:
CPU[||||||||||||||||||||||| 2.78%] Tasks: 38, 91 thr; 1 running
Mem[||||||||||||||||||||||| 5.38%] Load average: 0.05 0.05 0.05
Swp[                                        0%] Uptime: 397 days(!), 04:32:40

PID USER      PRI NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
  1 root      20   0 113M 3368K 2512K S 0.0  0.0  8:04.57 -bash
2292 root      20   0 43244 1796K 1216K S 0.0  0.0 22:18.15 /usr/lib/systemd/systemd --system --deserialize 20
28058 root     20   0 42040 3368K 2512K S 0.0  0.4 22:18.15 /usr/sbin/aliyun-service
28059 root     20   0 42040 3368K 2512K S 0.0  0.4 21:51.17 /usr/sbin/aliyun-service
28060 root     20   0 42040 3368K 2512K S 0.0  0.4 24:09.85 /usr/sbin/aliyun-service
25431 nscd      20   0 644M 1752K 1216K S 0.0  0.0 39:12.35 /usr/sbin/nscd
25432 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:23.37 /usr/sbin/nscd
25433 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.20 /usr/sbin/nscd
25434 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.21 /usr/sbin/nscd
25435 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.19 /usr/sbin/nscd
25436 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.18 /usr/sbin/nscd
25437 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.18 /usr/sbin/nscd
25438 nscd      20   0 644M 1752K 1216K S 0.0  0.0  0:02.16 /usr/sbin/nscd
22662 root      20   0 125M 1796K 1216K S 0.0  0.0  0:01.82 /usr/sbin/crond -n
22663 root      20   0 125M 1796K 1216K S 0.0  0.0  0:02.16 nginx: master process nginx
22664 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process
22665 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process
22666 nginx     20   0 125M 1796K 1216K S 0.0  0.0  0:03.57 nginx: worker process

4.4 进程内存使用查看

4.4.1 /proc/[pid]/meminfo文件

每个进程在/proc目录下都有一个以其PID命名的子目录,其中包含了该进程的内存使用信息。通过查看/proc/[pid]/meminfo文件,可以获取特定进程的内存使用情况。

示例:

# 查看进程ID为1234的内存使用情况
cat /proc/1234/meminfo
4.4.2 /proc/[pid]/status文件

/proc/[pid]/status文件包含了进程的状态信息,其中包括内存使用情况。该文件提供了更详细的进程内存信息,如VmSize、VmRSS、VmData等。

示例:

# 查看进程ID为1234的状态信息
cat /proc/1234/status
4.4.3 pmap命令

pmap命令用于显示进程的内存映射信息,包括进程的虚拟地址空间、物理内存使用情况、共享库等。它可以帮助分析进程的内存布局和共享库使用情况。

语法

pmap [选项] [pid]

常用选项

  • -x:显示扩展格式,包含更多详细信息
  • -d:显示数据段和栈的详细信息
  • -q:安静模式,只显示总内存使用量

示例输出

[root@localhost ~]# pmap -d 1234
1234:   /usr/bin/gnome-terminal-server
Address           Kbytes     RSS   Dirty Mode  Mapping
000055c0f0e4a000    1396    1396     80 r-x-- gnome-terminal-server
000055c0f101f000      40      40      0 r---- gnome-terminal-server
000055c0f1029000      36      36      0 rw--- gnome-terminal-server
000055c0f1032000      32      32      0 rw---   [ anon ]
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x-- libc-2.28.so
00007f60d4000000  122880  122880     20 r-x--



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值