【问题标题】:Calculating a Process's Memory Usage计算进程的内存使用情况
【发布时间】:2023-03-27 09:48:01
【问题描述】:

我有一个指向正在运行的进程的指针。我想知道该进程占用了多少物理内存。

我试过这个,但我得到 0 作为返回值。

unsigned long mem_usage(struct task_struct *process)
{   
    return process->mm->total_vm/2048 * 100000; // this is wrong vm means virtual memory.
}

process->mm->total_vm 返回字节对吗?有没有更简单的计算方法?

【问题讨论】:

  • 这是linux内核吗?如果是这样,可能有一个标签。另外,尝试颠倒操作顺序。 process->mm->total_vm * 100000 / 2048
  • 是的。只是在我倒车时挂起。这是我尝试的第一件事。

标签: c memory process linux-kernel


【解决方案1】:

根据mm_types.h

unsigned long total_vm; /* Total pages mapped */

pages 中的大小。

这意味着,如果您想要以字节为单位的大小,则必须将页面转换为字节

total_vm << PAGE_SHIFT

更新:

相反的方式,将字节转换为页面,是

pages = bytes >> PAGE_SHIFT;

但这仅适用于整页。如果bytes 是一些页加上一些剩余字节,则必须增加页数或

pages = (bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;

只需 2 个GiB 即可

pages_2gb = (2 * 1024 * 1024 * 1024) >> PAGE_SHIFT;

【讨论】:

  • 如何在页面中表示 2GB?我认为这会更容易。
  • 这是一个不同的问题。为什么会更容易?
猜你喜欢
  • 2011-01-17
  • 1970-01-01
  • 2014-06-03
  • 2010-10-19
  • 2016-05-30
  • 2016-07-07
  • 2016-08-29
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多