当谈到 Linux 进程内存时,有几个重要的概念需要理解:VSS、RSS、PSS、USS。 「虚拟耗用内存(VSS)」:VSS 表示进程虚拟地址空间的大小,即进程可以访问的所有虚拟内存区域的总和。这包括代码、数据、堆、栈等。在简单术语中,你可以把它看作进程拥有的所有内存空间的大小。 「驻留集大小(RSS)」:RSS 表示进程当前实际使用的物理内存大小,即进程实际占用的物理内存量。这个指标更直接地反映了进程实际使用的内存量。 「比例集大小(PSS)」:PSS 是一个计算值,表示进程实际使用的物理内存大小,但是按照共享内存的比例进行分摊。如果多个进程共享一块内存,那么这块内存的 PSS 值将被平均分摊到各个进程。 「唯一集大小(USS)」:USS 表示进程独占的物理内存大小,即进程独自使用的物理内存量。这个指标可以帮助你了解进程独占的内存量。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int *ptr = malloc(100 * sizeof(int)); // 分配100个整型的内存空间
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 100; i++) {
ptr = i; // 在分配的内存中存储数据
}
sleep(30); // 模拟程序运行一段时间
free(ptr); // 释放内存
return 0;
}
这个程序分配了100个整型的内存空间,存储了数据后等待30秒然后释放内存。 工具查看程序的内存使用情况: 「top」:在终端中运行 top 命令,可以查看系统中运行的进程列表以及各个进程的内存使用情况。 「ps」:使用 ps 命令可以列出进程的信息,包括进程的 VSS、RSS 等内存指标。 ps -o pid,vsize,rss,cmd -p <进程ID>
「pmap」:pmap 命令可以显示进程的内存映射表,包括各个内存区域的大小和权限。 pmap -x <进程ID>
「smem」:smem 命令可以按照 RSS 或 PSS 等指标对进程进行排序,并显示进程的内存使用情况。 smem -p -c "pid vss rss pss uss name" | grep <进程名>
|