【问题标题】:Memory used by a process under mac os xmac os x下某个进程使用的内存
【发布时间】:2013-08-25 17:21:11
【问题描述】:

给定一个 PID,我如何获取进程当前使用的内存?具体来说,我正在寻找:

  • 进程使用的私有物理内存 (RAM)
  • 进程使用的交换空间

但我对映射文件和共享内存不感兴趣。简而言之,我想确定通过终止 PID 将释放多少内存(RAM 和交换)。

【问题讨论】:

  • 谢谢,但本文指的是 mac 上不可用的工具(/proc、pmap、smem、htop、gcore)或诸如 valgrind 之类的东西,它们不是一个选项。我主要是在寻找一种以编程方式查找进程使用的内存(RAM)和 SWAP 的方法。 PS可以工作,但它没有报告。我应该标记objective-c而不是cocoa。但这不会更好。 C/c++ 调用很好,只要它们可以放在 MAC OS 平台上。

标签: macos cocoa memory pid


【解决方案1】:

这会有用吗?您可以使用带有各种选项的 ps 命令来获取至少其中一些内容:

ps -o rss -o vsz -o pid

将为您提供驻留集大小、虚拟大小和进程 ID。我从man 页面看到-o paddr 提供了交换地址,但我看不到哪个选项提供了交换大小。

【讨论】:

  • 感谢您的回复。我相信这个命令会返回地址空间大小? RSS 是否也包括共享/映射内存? (注:-p pid)。
  • 或者更简单:ps -o rss,vsz,pid.
  • 请注意,如果您使用它以编程方式获取内存,则向ps 发送费用非常昂贵github.com/schneems/get_process_mem/issues/31
【解决方案2】:

您可以使用 Mach 的 task_info 调用来查找此信息。这是在 OS X v10.9 上运行的代码,它获取当前进程的虚拟进程大小:

#include <mach/mach.h>
#include <mach/message.h>  // for mach_msg_type_number_t
#include <mach/kern_return.h>  // for kern_return_t
#include <mach/task_info.h>
#include <stdio.h>

int main(void) {
  kern_return_t error;
  mach_msg_type_number_t outCount;
  mach_task_basic_info_data_t taskinfo;

  taskinfo.virtual_size = 0;
  outCount = MACH_TASK_BASIC_INFO_COUNT;
  error = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&taskinfo, &outCount);
  if (error == KERN_SUCCESS) {
    // type is mach_vm_size_t
    printf("vsize = %llu\n", (unsigned long long)taskinfo.virtual_size);
    return 0;
  } else {
    printf("error %d\n", (int)error);
    return 1;
  }
}

我认为这不包括共享内存段,但我不确定。

【讨论】:

  • 非常感谢!此处的代码返回当前进程的信息。你知道如何在 mac 上检索不同 PID 的驻留集大小吗?
猜你喜欢
  • 2012-08-29
  • 2010-12-24
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 2018-01-27
  • 2023-03-21
相关资源
最近更新 更多