首页 > 系统相关 >内存管理-31-进程内存占用-2-/proc/pid/statm

内存管理-31-进程内存占用-2-/proc/pid/statm

时间:2024-08-26 22:05:48浏览次数:9  
标签:struct mm 31 pid MM 内存 statm proc

基于msm-5.4

一、初探

1. 打印格式

# cat /proc/593/statm //非内核线程
2826695 22403 17848 1420 0 12717 0 //以 PAGE_SIZE 为单位

# cat /proc/187/statm //内核线程
0 0 0 0 0 0 0

打印成员介绍:

1: size: 打印的是 mm->total_vm 的值,表示任务占用虚拟地址空间大小,单位PAGE_SZIE。对应status文件节点的 VmSize 除以4后的值。
2: resident: 打印的是 MM_FILEPAGES + MM_SHMEMPAGES + MM_ANONPAGES, 表示任务正在使用的物理内存的大小,对应status文件节点的 VmRSS 除以4后的值。
3: shared: 打印的是 MM_FILEPAGES + MM_SHMEMPAGES,表示任务的共享页数。
4: text: 任务代码段虚拟内存大小,打印的是 mm->end_code - mm->start_code 对应的页面个数,对应status文件节点的 VmExe 除以4后的值。
5: 打印的是固定0值
6: data: 打印的是 mm->data_vm + mm->stack_vm 的值。
7: 打印的是固定0值


2. 实现

static const struct pid_entry tgid_base_stuff[] = { //fs/proc/base.c
    ONE("statm",      S_IRUGO, proc_pid_statm),
};
static const struct pid_entry tid_base_stuff[] = { //fs/proc/base.c
    ONE("statm",     S_IRUGO, proc_pid_statm),
};

int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
        struct pid *pid, struct task_struct *task) //proc/array.c
{
    unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0;
    /* 若是内核线程返回NULL */
    struct mm_struct *mm = get_task_mm(task);
    if (mm) {
        size = task_statm(mm, &shared, &text, &data, &resident);
        mmput(mm);
    }
    seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", size, resident, shared, text, data);

    return 0;
}

unsigned long task_statm(struct mm_struct *mm, unsigned long *shared, unsigned long *text,
        unsigned long *data, unsigned long *resident) //proc/task_mmu.c
{
    /* mm->rss_stat.count[MM_FILEPAGES] + mm->rss_stat.count[MM_SHMEMPAGES] */
    *shared = get_mm_counter(mm, MM_FILEPAGES) + get_mm_counter(mm, MM_SHMEMPAGES);
    /* mm->end_code 向上圆整,mm->start_code 向下圆整,以 PAGE_SIZE 为单位 */
    *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK)) >> PAGE_SHIFT;
    *data = mm->data_vm + mm->stack_vm;
    /* MM_FILEPAGES + MM_SHMEMPAGES + MM_ANONPAGES */
    *resident = *shared + get_mm_counter(mm, MM_ANONPAGES);
    /* 返回值是总占用的虚拟内存 */
    return mm->total_vm;
}


3. 实验

通过这个文件看,主线程的和各个子线程的cat出来的值是完全一样的

P=593; cat /proc/$P/statm; for T in `ls /proc/$P/task/`; do cat /proc/$P/task/$T/statm; done;

 

标签:struct,mm,31,pid,MM,内存,statm,proc
From: https://www.cnblogs.com/hellokitty2/p/18381663

相关文章

  • 内存管理-31-进程内存占用-3-/proc/pid/maps‌
    基于msm-5.4一、初探此文件描述了进程使用的每个内存段的信息,但是并不是所有的段,也不是一个段的所有部分都加载到内存中了,除非使用了对应的页面。1.打印格式#cat/proc/593/maps5e0cb16000-5e0cc1a000r--p00000000fc:03100868352/system/bin/su......
  • 内存管理-31-进程内存占用-4-/proc/pid/smaps
    基于msm-5.4一、初探1.打印格式#cat/proc/593/smaps...7e5a528000-7e5a626000r--p0000000000:1f5/dev/binderfs/hwbinderSize:1016kBKernelPageSize:4kBMMUPageSize:4kBRss:......
  • 【C++ 面试 - 内存管理】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 内存管理-30-系统内存占用
    基于msm-5.4一、前言1.相关名词介绍RSS(ResidentSetSize)‌:这是进程当前在物理内存中占用的空间,包括进程本身和所有链接库。RSS是评估进程内存占用的一个重要指标,它直接反映了进程当前实际使用的物理内存量‌。但由于包含了共享库,用处不大。‌PSS(ProportionalSetSize)‌......
  • 内存管理-31-进程内存占用-1-/proc/pid/status
    基于msm-5.4一、初探1.打印格式#cat/proc/593/statusName:surfaceflinger...VmPeak:11322904kBVmSize:11306812kBVmLck:0kBVmPin:0kBVmHWM:92828kBVmRSS:91100kBRssAnon:19708kBRssFile:70884kB......
  • limu|P31-34|CPU和GPU
    目录CPUVSGPU提升CPU利用率1、提升空间和时间的内存本地性2、并行以利用所有核提升GPU利用率1、并行2、内存本地性3、少用控制语句4、不要频繁在CPU和GPU之间传数据单机多卡并行分布式计算CPUVSGPU首先,一个芯片的空间是有限的,给了很多空间给某个内容(能力强),其他内容的空间就......
  • sqli-labs靶场通关攻略 31-35
    主页有sqli-labs靶场通关攻略1-30第三一关less-31闭合方式为?id=1&id=1")--+步骤一:查看数据库名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%201,database(),3%20--+ 步骤二:查看表名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%2......
  • sqli-labs靶场通关攻略(31-35关)
    第31关(")闭合)查数据库?id=")unionselect1,2,database()--+查表?id=")unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema='security'--+查列?id=")unionselect1,2,group_concat(column_nam......
  • Spring Boot 3 中的性能优化:更快的启动时间和更低的内存占用
    随着微服务架构的普及,SpringBoot因其简洁的配置和快速的开发周期,成为了众多开发者的首选框架。然而,随着应用规模的增大和复杂度的提升,如何优化SpringBoot应用的启动时间和内存占用成为了一个重要的课题。本文将探讨在SpringBoot3中可以采取的一些性能优化措施,以实现......
  • JVM-内存结构(超详细)
    目录程序计数器(PC寄存器)定义作用特点Java虚拟机栈定义结构​编辑栈帧的结构栈帧的生命周期JVM压栈出栈过程Java虚拟机栈的特点常见运行时异常本地方法栈(NativeMethodStack)定义作用结构生命周期特点堆定义特点新生代、老年代对象分配过程总结方......