procinfo-尝试了解数据是如何收集的

procinfo-尝试了解数据是如何收集的

编辑:我正在考虑将这个问题标记为已回答,因为我意识到文件大小为零让我很困惑。这让我头脑发昏,惊慌失措。阅读下面的答案后,我意识到我以前经常阅读这些文件,但从未想过要检查它们的文件大小。因此我的问题具有误导性。我应该只问为什么文件大小仅为 0。

这不是关于缺少 RAM 的问题 - 但可能是关于文件大小为 0 的问题。我是否正在查看文件大小为零的文件,因为它们是 RAM 中数据的别名,而不是磁盘上的数据?

我知道 procinfo 从 Linux 机器上的 /proc 目录收集信息。但我查看了该目录,无法弄清楚它实际上查询了哪些文件。似乎大多数文件都是 0 字节。真正奇怪的是,在我的系统上,某个文件 kcore 被列为 128T。

我读到 kcore 代表我系统上的 RAM 数量,但我确定我没有 128T RAM(我有 12GB)。我查看了我重新启动的第二台服务器,文件大小为 884M(该服务器有 1GB RAM)。

我相信,无论是否使用 kcore,procinfo 都会根据内存中的数据提供统计数据。而且我相信 procinfo 在重启后无法保留数据这一点已经得到验证。

我有两个问题:

  1. 有人愿意澄清这些假设并对该性能工具添加一些有用的观察吗?

  2. 如果 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 的内存。

相关内容