【发布时间】:2010-12-19 13:31:10
【问题描述】:
在命令行上,可以使用“free”实用程序和“cat /proc/meminfo”找到它。 在 Linux 中以编程方式找出物理 RAM 大小的不同方法是什么:
- 用户空间应用程序
- 内核模块
有哪些 API 调用可用?
【问题讨论】:
-
如果重复,请指出类似的问题,然后可以关闭。
标签: linux memory linux-kernel
在命令行上,可以使用“free”实用程序和“cat /proc/meminfo”找到它。 在 Linux 中以编程方式找出物理 RAM 大小的不同方法是什么:
有哪些 API 调用可用?
【问题讨论】:
标签: linux memory linux-kernel
#include <unistd.h>
long long physical_mem_bytes = (long long) sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
除了命令行 ulimit,我不知道找到单个进程最大内存的方法。
【讨论】:
以编程方式,Linux 不会告诉您实际的物理大小。相反,您应该从 SMBIOS 读取此信息,例如,
sudo dmidecode -t memory | fgrep -ie 'size:'
这将为您提供如下结果(来自具有 4 个 RAM 组的盒子,仅安装了 2 个):
Maximum Memory Module Size: 16384 MB
Maximum Total Memory Size: 65536 MB
Installed Size: 2048 MB (Single-bank Connection)
Enabled Size: 2048 MB (Single-bank Connection)
Installed Size: Not Installed
Enabled Size: Not Installed
Installed Size: 2048 MB (Single-bank Connection)
Enabled Size: 2048 MB (Single-bank Connection)
Installed Size: Not Installed
Enabled Size: Not Installed
Size: 2048 MB
Size: No Module Installed
Size: 2048 MB
Size: No Module Installed
添加报告的大小(或Enabled Sizes,但某些 BIOS 凭经验不会报告)以获得(在这种情况下)4096 MB。 (自动解析和算术的代码加分,但你可以在你的脑海中几乎同样可靠地做到这一点。)
要检查您的计算,请运行
fgrep -e 'MemTotal:' /proc/meminfo
/proc/meminfo 报告的值不应大于您从dmidecode 计算的值。在这种情况下,凭经验我得到
MemTotal: 3988616 kB
【讨论】:
cat /proc/meminfo
【讨论】:
特别是从记忆中,我从 Jared 所说的内容中得到了这个结果
sudo dmidecode -t memory
在那里你可以阅读每个单独的内存插槽的规格,所以你会读到类似 2048MB 的东西,在我的情况下,我有 2 个是 4gb,尽管我的非 PAE 内核只显示大约 3.3gb,所有其他应用程序都不会说真正的物理内存,只有 dmidecode,谢谢!
【讨论】: