free -h 获取操作系统当前内存
Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。
https://blog.csdn.net/xp178171640/article/details/123634439
top
PID:进程id
USER:进程所有者
PR:进程的优先级,越小优先级越高
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存,单位是kb
RES:进程使用的物理内存,单位kb
SHR:进程使用的共享内存,单位kb
S:进程状态(S表示休眠,R表示正在运行, Z表示僵死状态,N表示该进程优先值为负数,I表示空闲状态)
%CPU:进程占用的CPU使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:命令行
https://blog.csdn.net/weixin_40734030/article/details/125558689
VIRT:
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
RES:
1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB;
获取进程的占用
/proc/[pid]/statm
size (1) total program size
(same as VmSize in /proc/[pid]/status)
resident (2) resident set size
(same as VmRSS in /proc/[pid]/status)
share (3) shared pages (i.e., backed by a file)
text (4) text (code)
lib (5) library (unused in Linux 2.6)
data (6) data + stack
dt (7) dirty pages (unused in Linux 2.6)
参数 解释 /proc/[pid]/status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
代码获取进程的消耗占用
snprintf(filename, sizeof(filename) - 1, "/proc/%d/statm", pid); char buf[256];
FILE *fd = fopen(filename, "r");
文件内容就是上面的,, size Resident Shared