procinfo – 试图了解如何收集数据

编辑:我正在考虑标记这个问题的答案,因为我已经意识到,我很困惑的事实,文件大小为零。 这使我有一个大脑屁,恐慌。 在阅读下面的答案后,我意识到我经常阅读这些文件,但从来没有想过检查他们的文件大小。 所以我的问题是误导。 我应该只问为什么文件大小只有0。

这不是关于丢失内存的问题 – 但它可能是一个关于文件大小为0的问题。我正在查看文件大小为零的文件,因为它们是ram中的数据的别名而不是磁盘上的数据?

据我所知,procinfo收集来自linux机器上/ proc目录的信息。 但是我已经看过那个目录,不知道它实际上查询了哪些文件。 看起来好像大多数文件是0字节。 奇怪的是,一个特定的文件kcore在我的系统上被列为128T。

我读过,kcore代表了我的系统内存的数量,但我相信我没有128T内存(我有12GB)。 我看了一下我重新启动的第二个服务器,文件是884M(该服务器有1GB的内存)。

我相信,无论是否使用kcore,procinfo都是基于ram中的数据提供统计。 我相信这是由procinfo无法保持数据重新启动后validation。

我有两个问题:

  1. 有人会关心澄清这些假设,并添加一些关于这个性能工具的有用的观察?

  2. 什么是kcore,如果它不是我系统上ram的代表(正如我读过的)?

要回答为什么proc下的文件显示0字节大小的问题:

/ proc下的文件不是普通文件,而是由内核模拟的。 他们的内容可以(并将会不断变化),所以没有有用的“文件大小”的概念(随着大小不断变化)。 这可能是系统将它们显示为“大小0”的原因。

/proc中的许多文件都被ls列为零字节,但是如果你将它们卡住,那么会显示一些信息。

 $ 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. 

(其中$$由shellparsing为当前PID)

/ proc / kcore没有被procinfo使用。 注意一个普通的用户可以运行procinfo,而他们通常不能读取kcore。

你确定你正确读取/ proc / kcore大小吗? 用ls -lh检查大小,并与free值进行比较

看看man proc的每个条目的详细解释。 有很多冗余,但可以从/proc/meminfo提取内存使用量,从/proc/loadavg加载平均值,从/proc/interrupts加载IRQ数据。

对于你的第二个服务器,x86上有一个内核设置“高内存支持”,如果没有启用,将会限制你的物理内存大于800MB,也许你受到这个影响?

/ poc / kcore表示您的系统可以处理的最大内存。 在你的情况下,你正在运行一个64位的操作系统,这意味着你可以有128TB的内存。