以编程方式检索进程的峰值虚拟内存

我试图在Linux,macOS和FreeBSD上找到我正在运行的进程的最高虚拟内存。

我关注的是峰值虚拟内存,因为这是在任何给定点超出物理内存限制(RSS可提供什么高峰)的过程中,我的进程的峰值内存使用情况的相关度量。

本着如何从进程内部确定CPU和内存消耗的精神? 我打算使用这篇文章为这三个平台编译解决方案(如果您有工作代码提供,我很乐意将它扩展到更多的平台)。

视窗

在Windows上,以下内容似乎会返回与Process Explorer相同的值:

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(
    GetCurrentProcess(),
    reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&pmc),
    sizeof(pmc));
return pmc.PeakPagefileUsage;

Linux的

解析/proc/self/status的输出是Linux上的最佳/唯一选项? 所有的Linux风格都以相同的方式返回相同的信息格式吗?

作为参考,下面是Ubuntu上的一个输出示例:

root@appleseedhq:~# cat /proc/self/status
Name:   cat
State:  R (running)
Tgid:   12975
Ngid:   0
Pid:    12975
PPid:   12938
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 256
Groups: 0
VmPeak:     7220 kB
VmSize:     7220 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:       608 kB
VmRSS:       608 kB
VmData:      176 kB
VmStk:       136 kB
VmExe:        44 kB
VmLib:      1924 kB
VmPTE:        40 kB
VmSwap:        0 kB
Threads:        1
(more stuff...)

这里感兴趣的线似乎是

VmPeak:     7220 kB

任何更简单,更快,更脆弱的解决方案?

苹果系统

在MacOS我想到用task_info()TASK_BASIC_INFOMACH_TASK_BASIC_INFO会做的工作,即

#ifdef MACH_TASK_BASIC_INFO
    struct mach_task_basic_info info;
    mach_msg_type_number_t info_count = MACH_TASK_BASIC_INFO_COUNT;

    if (task_info(
            mach_task_self(),
            MACH_TASK_BASIC_INFO,
            (task_info_t)&info,
            &info_count) != KERN_SUCCESS)
        return 0;
#else
    struct task_basic_info info;
    mach_msg_type_number_t info_count = TASK_BASIC_INFO_COUNT;

    if (task_info(
            mach_task_self(),
            TASK_BASIC_INFO,
            (task_info_t)&info,
            &info_count) != KERN_SUCCESS)
        return 0;
#endif

不幸的是,虽然接近,但它看起来并不像我能够获得进程的峰值虚拟内存,只有当前的虚拟内存使用(以info.virtual_size ,以字节为单位)。

FreeBSD的

同样,在FreeBSD上,我认为getrusage()会提供信息,但它似乎没有关于峰值虚拟内存的任何信息。

链接地址: http://www.djcxy.com/p/79827.html

上一篇: Programmatically retrieve peak virtual memory of a process

下一篇: Remote Processor / Memory usage of Specific Process