编辑:我正在考虑将这个问题标记为已回答,因为我意识到文件大小为零让我很困惑。这让我头脑发昏,惊慌失措。阅读下面的答案后,我意识到我以前经常阅读这些文件,但从未想过要检查它们的文件大小。因此我的问题具有误导性。我应该只问为什么文件大小仅为 0。
这不是关于缺少 RAM 的问题 - 但可能是关于文件大小为 0 的问题。我是否正在查看文件大小为零的文件,因为它们是 RAM 中数据的别名,而不是磁盘上的数据?
我知道 procinfo 从 Linux 机器上的 /proc 目录收集信息。但我查看了该目录,无法弄清楚它实际上查询了哪些文件。似乎大多数文件都是 0 字节。真正奇怪的是,在我的系统上,某个文件 kcore 被列为 128T。
我读到 kcore 代表我系统上的 RAM 数量,但我确定我没有 128T RAM(我有 12GB)。我查看了我重新启动的第二台服务器,文件大小为 884M(该服务器有 1GB RAM)。
我相信,无论是否使用 kcore,procinfo 都会根据内存中的数据提供统计数据。而且我相信 procinfo 在重启后无法保留数据这一点已经得到验证。
我有两个问题:
有人愿意澄清这些假设并对该性能工具添加一些有用的观察吗?
如果 kcore 不是我系统上的 RAM 的表示(正如我所读到的),那么它是什么?
答案1
回答关于为什么 proc 下的文件显示 0 字节大小的问题:
/proc 下的文件不是常规文件,而是由内核模拟的。它们的内容可以(并且会)不断变化,因此没有有用的“文件大小”概念(因为大小不断变化)。这可能是系统将它们显示为“大小 0”的原因。
答案2
/proc
列出的许多文件ls
都具有零字节,但如果您查看cat
它们,则会显示一些信息。
$ ls -l /proc/$$/status
-r--r--r-- 1 user user 0 2010-02-24 19:45 /proc/25440/status
$ cat /proc/$$/status
Name: bash
State: S (sleeping)
Tgid: 25440
Pid: 25440
PPid: 25439
TracerPid: 0
etc.
(其中$$
shell 解析为当前 PID)
答案3
/proc/kcore 未被 procinfo 使用。观察发现,普通用户可以正常运行 procinfo,但他们通常无法读取 kcore。
你确定你正确读取了 /proc/kcore 大小吗?用 检查大小ls -lh
,并与以下值进行比较:free
请查看man proc
了解每个条目的详细说明。虽然有很多冗余,但可以从 中提取内存使用情况/proc/meminfo
,从 中提取平均负载/proc/loadavg
,从 中提取 IRQ 数据/proc/interrupts
。
对于您的第二台服务器,x86“高内存支持”上有一个内核设置,如果不启用,会将您的物理内存限制为 800MB 多一点,也许您会受到这方面的影响?
答案4
/poc/kcore 表示系统可以处理的最大内存。就您而言,您运行的是 64 位操作系统,这意味着您可以拥有 128TB 的内存。