我在 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_Dirty
Private_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 能够将其作为图表输出。