在 Centos 6.3 中使用 Cacti 获取内存消耗最高的 10 个进程的列表

在 Centos 6.3 中使用 Cacti 获取内存消耗最高的 10 个进程的列表

我在 Centos 6.3 中使用 Cacti,我想获取前 10 个内存消耗进程的列表,并带有内存图,这样如果服务器出现故障,我可以轻松找到其背后的进程。

可以使用插件或模板吗?

答案1

首先,这些数据很难用一个RRD数据库。因为你的 10 个 PID/进程会改变,但 RRD 数据源是静态的。您可以只记录 1-10,但随后您将无法获得更多信息。您可以通过将名称/PID 映射到数据源来解决这个问题,但是您需要提前提出所有必需的名称,这并不容易。或者,您可以为每个 pid 创建 65536 个数据源,但绘制图表有点棘手。

可能是时候尝试一些更具可扩展性的东西了,比如开放TSDB

其次,监控 Linux 中的实际内存使用情况并不容易。ps谎言。 Linux 使用共享内存,并且不提供简单的接口来查询每个进程级别的信息。还有内核内存和缓存会影响机器上的内存性能。

您可以跟踪 3 件事来帮助突出内存问题。

  • 每个可执行文件共享和私有内存
  • 每个进程私有内存
  • 内核内存

每个可执行文件共享和私有内存

ps_mem.py 脚本,这是我发现的最好的“现成”估计。

笔记“这些值是根据程序,而不是每个进程”,这是共享内存工作方式和内核中完成的记帐方式的副产品。

每个进程的私有内存

您可以通过计算每个文件的和的/proc/[0-9]*/smaps 所有值来获取每个进程的私有内存。您可以从或获取进程名称Private_DirtyPrivate_Clean/proc/[0-9]*/status/proc/[0-9]*/stat

记忆信息

总体内存使用值来自/proc/meminfo

MemTotal
MemFree
Buffers
Cached
SwapTotal
SwapFree
AnonPages
Mapped
Dirty
Writeback
Shmem
Slab
KernelStack
PageTables
NFS_Unstable
Bounce
WritebackTmp

您可以从这些值中推断出大量信息, /proc/meminfo这些信息可能比单独所有这些数据点更好地绘制图表。

从这三个方面,您应该能够很好地了解大多数内存问题的根源。

毕竟,我仍然发现 linux 帐户分配的内存仍然存在一个“漏洞”。这个洞似乎是虚拟->物理内存映射,因为机器拥有的内存越多,洞就越大。

答案2

有一个模板允许您使用 snmp 来使用 proc 进行监控 cacti 能够将其作为图表输出。

http://forums.cacti.net/about19640.html

相关内容