如何在Mac OS上获取进程的最高内存峰值?

3
在Linux中,当一个进程在运行时,我可以通过查看/proc/self/status文件来检查其当前内存使用情况和历史峰值内存使用情况。那么在Mac中是否有类似的文件呢?
在Mac中,我发现vmmap pid可以提供大量有关内存使用情况的信息,但貌似没有监视pid峰值内存使用情况的命令。请问有人能帮忙提供此类命令吗?

https://dev59.com/iWjWa4cB1Zd3GeqPr5Nx#30124747 - Mark Setchell
默认情况下,macOS 中没有 procfs。我认为可能有第三方软件包可以添加它,但我不确定。您是想以编程方式获取此信息还是交互式地(仅通过“cat”文件)? - Ken Thomases
@MarkSetchell 谢谢您提供的链接!我也看到了那个问题,但似乎与特定进度无关。您的意思是我应该在程序中嵌入这样一个系统调用吗? - Fileland
@KenThomases 感谢您的回答!我正在编写一些C程序,并希望在运行时分析其内存使用情况。 - Fileland
1个回答

3
一个程序可以使用Mach API来获取其自身的内存统计信息。例如:
#include <stdio.h>
#include <mach/mach.h>
#include <stdlib.h>

int main(void)
{
    kern_return_t ret;
    mach_task_basic_info_data_t info;
    mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT;

    ret = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &count);
    if (ret != KERN_SUCCESS || count != MACH_TASK_BASIC_INFO_COUNT)
    {
        fprintf(stderr, "task_info failed: %d\n", ret);
        exit(EXIT_FAILURE);
    }

    printf("resident size max: %llu (0x%08llx) bytes\n",
           (unsigned long long)info.resident_size_max,
           (unsigned long long)info.resident_size_max);
    return 0;
}

或者,您可以在Instruments下运行程序,使用Allocations模板观察其内存使用情况。(Xcode本身也有内存计量工具,但我不记得它是否显示峰值使用情况。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接