Linux内存管理全面指南:分配、使用、监控与优化
一、Linux内存管理概述
1.1 内存管理的基本概念
在Linux系统中,内存管理是操作系统的核心功能之一,负责分配、使用和回收系统内存资源。Linux采用虚拟内存技术,为每个进程提供独立的虚拟地址空间,使应用程序能够高效、安全地使用内存资源[]。
虚拟内存技术通过内存管理单元(MMU)和页表,将虚拟地址映射到物理内存位置。这种映射关系由硬件和软件共同维护,为应用程序提供了一个统一的内存视图,隐藏了物理内存的复杂性和碎片化问题[]。
Linux内存管理的主要目标包括:
- 高效分配:确保内存资源能够被快速分配和释放
- 保护隔离:保证进程间内存相互隔离,防止非法访问
- 内存扩展:通过交换空间(swap)扩展可用内存
- 性能优化:通过缓存和预取技术提升内存访问速度
1.2 内存分配的层次结构
Linux内存分配采用多层次结构,从底层到高层依次为:
- 物理内存分配:直接操作物理内存,由伙伴系统(Buddy System)管理
- 内核内存分配:为内核对象和数据结构分配内存,使用SLAB/SLUB分配器
- 用户空间分配:为应用程序分配内存,通过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()的封装[]。其工作原理如下:
- 当请求分配小内存时(小于128KB),使用brk()从堆分配
- 当请求分配大内存时(大于等于128KB),使用mmap()在文件映射区分配
- 内存释放时,brk()分配的内存返回内存池,mmap()分配的内存归还操作系统
- 内存分配前会尝试重用已释放的内存块,减少系统调用次数[]
示例:
#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页等),通过递归分割和合并来分配和释放内存[]。
工作原理:
- 内存以页为单位管理,默认页大小为4KB
- 分配时,系统寻找能满足需求的最小块
- 如果找不到合适的块,就将较大的块分割为两个"伙伴"
- 释放时,检查相邻的伙伴是否空闲,如果是则合并成更大的块[]
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[]。其工作原理如下:
- 确定所需内存大小,并向上取整到SLUB缓存的大小
- 根据内存大小选择合适的缓存
- 从缓存中分配对象,如果缓存中没有可用对象,则从伙伴系统分配新的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
内核参数配置[]:
-
启发式超量分配(vm.overcommit_memory=0)(默认)
- 允许进程超量分配内存,但受内部启发式算法限制
- 算法考虑可用内存、交换空间和可回收缓存
- 优点:允许合理的超量分配,提高内存利用率
- 缺点:可能触发OOM Killer[]
-
总是超量提交(vm.overcommit_memory=1)
- 总是允许内存分配成功,即使系统内存不足
- 不考虑可用内存和交换空间限制
- 优点:应用程序不会因内存分配失败而启动失败
- 缺点:可能导致严重的性能问题和OOM情况[]
-
严格超量提交(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进程的虚拟地址空间主要分为以下几个部分:
- 代码段(Text Segment):包含程序的可执行代码
- 数据段(Data Segment):包含已初始化的全局变量和静态变量
- BSS段(BSS Segment):包含未初始化的全局变量和静态变量
- 堆(Heap):动态分配的内存区域,由malloc等函数管理
- 文件映射区(File Mapping Segment):包含共享库、内存映射文件等
- 栈(Stack):包含函数参数、局部变量和返回地址[]
示例:
高地址
┌───────────────────────────────────────────────────────────────────────┐
│ 内核空间 ─────────────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 文件映射区 (共享库、内存映射文件) ─────────────────────────── │
│ 堆 (动态分配内存,向上增长) ─────────────────────────────────── │
│ BSS段 (未初始化数据) ───────────────────────────────────────── │
│ 数据段 (已初始化数据) ─────────────────────────────────────── │
│ 代码段 (程序代码) ───────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 保留区 ─────────────────────────────────────────────────────── │
├───────────────────────────────────────────────────────────────────────┤
│ 栈 (向下增长) ───────────────────────────────────────────────── │
└───────────────────────────────────────────────────────────────────────┘
低地址
3.2 内存使用监控指标
了解内存使用情况对于系统性能优化至关重要。以下是几个关键的内存使用指标:
- MemTotal:系统总内存大小
- MemFree:空闲内存大小
- MemAvailable:可用于分配给进程的内存大小
- Buffers:用于缓存文件系统元数据的内存
- Cached:用于缓存文件内容的内存
- SwapTotal:交换空间总大小
- SwapFree:空闲交换空间大小
- Active:活跃内存(最近使用过的内存)
- Inactive:非活跃内存(长时间未使用的内存)
- AnonPages:匿名内存页(未映射到文件的内存)[]
这些指标可以通过/proc/meminfo
文件查看,也可以通过free
、top
等命令获取。
3.3 交换空间(Swap)管理
交换空间是Linux系统在物理内存不足时使用的磁盘空间,作为内存的扩展[]。它允许系统将不活跃的内存页暂时保存到磁盘,腾出物理内存给更需要的进程[]。
3.3.1 交换空间的类型
Linux支持两种类型的交换空间:
- 交换分区(Swap Partition):专门用于交换的磁盘分区
- 交换文件(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内核的一项功能,允许系统在物理内存不足时对内存页进行压缩,减少内存使用量[]。这可以减少对交换空间的依赖,提高系统性能[]。
内存压缩的工作原理:
- 当系统内存不足时,内核会尝试压缩不活跃的内存页
- 压缩后的内存页存储在特殊的压缩缓存中
- 当需要访问这些页时,内核会自动解压缩[]
内存压缩的优点:
- 减少对交换空间的依赖
- 避免磁盘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命令
htop
是top
命令的增强版本,提供了更友好的用户界面和更多功能[]。它支持颜色高亮、鼠标操作、进程树视图等功能,是系统监控的理想工具[]。
安装方法:
# 在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
是一个多功能的系统资源统计工具,可以替代vmstat
、iostat
、ifstat
等多个命令[]。它提供了丰富的统计信息,包括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--