Linux内存计算

来源:互联网 发布:有限元软件开发 编辑:程序博客网 时间:2024/06/07 07:08

以下程序是计算当前虚拟内存。

#include "stdlib.h"#include "stdio.h"#include "string.h"int parseLine(char* line){    // This assumes that a digit will be found and the line ends in " Kb".    int i = strlen(line);    const char* p = line;    while (*p <'0' || *p > '9') p++;    line[i-3] = '\0';    i = atoi(p);    return i;}int getValue(){ //Note: this value is in KB!    FILE* file = fopen("/proc/self/status", "r");    int result = -1;    char line[128];    while (fgets(line, 128, file) != NULL){        if (strncmp(line, "VmSize:", 7) == 0){            result = parseLine(line);            break;        }    }    fclose(file);    return result;}

查询Linux系统下的进程内存信息,可打开文件/proc/self/status,如下:

Name:   whateverState:  S (sleeping)Tgid:   19340Pid:    19340PPid:   19115TracerPid:      0Uid:    0       0       0       0Gid:    0       0       0       0FDSize: 256Groups: 0 1 2 3 4 6 10 11 20 26 27VmPeak:   676252 kBVmSize:   651352 kBVmLck:         0 kBVmHWM:    420300 kBVmRSS:    420296 kBVmData:   581028 kBVmStk:       112 kBVmExe:     11672 kBVmLib:     76608 kBVmPTE:      1244 kBThreads:        77SigQ:   0/36864SigPnd: 0000000000000000ShdPnd: 0000000000000000SigBlk: fffffffe7ffbfeffSigIgn: 0000000010001000SigCgt: 20000001800004fcCapInh: 0000000000000000CapPrm: 00000000ffffffffCapEff: 00000000fffffeffCpus_allowed:   0fMems_allowed:   1voluntary_ctxt_switches:        6518nonvoluntary_ctxt_switches:     6598

VmPeak: 该进程峰值虚拟内存;

VmSize:整个进程的虚拟内存大小,是VMLib、VmExe、VMData和VmStk的总和;

VmLck:虚拟内存锁。进程当前使用的并且加锁的虚拟内存总数,锁住的内存不能交换到硬盘;

VmHWM:进程所占用物理内存的峰值;

VmRSS:进程现在使用的物理内存大小。

         虚拟内存驻留集合大小,这是驻留在物理内存的一部分,他没有交换到硬盘,包含代码、数据和栈;

VmData:虚拟内存数据,堆使用的虚拟内存;

VmStk:虚拟内存栈,栈使用的虚拟内存;

VmExe:可执行的虚拟内存,可执行的静态链接库所使用的虚拟内存;

VmLib:虚拟内存库动态链接库所使用的虚拟内存。





原创粉丝点击