proc.mem 监控项中的 memtype 参数说明

概述

memtype 参数支持 Linux、AIX、FreeBSD 和 Solaris 平台。

所有这些平台均支持 memtype 的三个常用值:pmem、rss 和 vsize。 此外,某些平台还支持特定于平台的 memtype 值。

AIX

请参阅下表,了解 AIX 上 memtype 参数支持的值。

支持的值 描述 procentry64 结构中的来源 尝试与其兼容
vsize 1 虚拟内存大小 pi_size
pmem 实际内存百分比 pi_prm ps -o pmem
rss 常驻集大小 pi_trss + pi_drss ps -o rssize
size 进程大小(代码 + 数据) pi_dvm ps gvw 的 SIZE 列
dsize 数据大小 pi_dsize
tsize 文本(代码)大小 pi_tsize ps gvw 的 TSIZ 列
sdsize 共享库中的数据大小 pi_sdsize
drss 数据常驻集大小 pi_drss
trss 文本常驻集大小 pi_trss

AIX 注意事项:

  1. 在 AIX 上为 proc.mem[] 监控项键选择参数时,请尽量指定精确的进程选择条件。 否则,可能会将不需要的进程计入 proc.mem[] 结果。

示例:

$ zabbix_agentd -t proc.mem[,,,NonExistingProcess,rss]
proc.mem[,,,NonExistingProcess,rss]           [u|2879488]

此示例表明,仅指定命令行(用于匹配的正则表达式)参数会导致 Zabbix agent 将自身计入统计结果,这可能不是您想要的结果。

  1. 不要使用 ps -ef 浏览进程——它只显示非内核进程。请使用 ps -Af 查看 Zabbix agent 能够看到的所有进程。

  2. 下面以 topasrec 为例,了解 Zabbix agent 如何通过 proc.mem[] 选择进程。

$ ps -Af | grep topasrec
root 10747984        1   0   Mar 16      -  0:00 /usr/bin/topasrec  -L -s 300 -R 1 -r 6 -o /var/perf daily/ -ypersistent=1 -O type=bin -ystart_time=04:08:54,Mar16,2023

proc.mem[] 的参数如下:

proc.mem[<name>,<user>,<mode>,<cmdline>,<memtype>]

其中:

  • 第一个条件是进程名称(参数 <name>)。 在我们的示例中,Zabbix agent 将其识别为 topasrec。要匹配该进程,您需要指定 topasrec,或者将其留空。
  • 第二个条件是用户名(参数 <user>)。 要匹配该进程,您需要指定 root,或者将其留空。
  • 进程选择中使用的第三个条件是参数 <cmdline>。 Zabbix agent 将其值识别为 /usr/bin/topasrec -L -s 300 -R 1 -r 6 -o /var/perf/daily/ -ypersistent=1 -O type=bin -ystart_time=04:08:54,Mar16,2023。 要匹配该进程,您需要指定一个与此字符串匹配的正则表达式,或者将其留空。

参数 <mode> 和 <memtype> 会在应用上述三个条件后使用。

FreeBSD

请参阅下表,了解 FreeBSD 上 memtype 参数支持的值。

支持的值 描述 kinfo\_proc 结构中的来源 尝试与以下命令兼容
vsize 虚拟内存大小 kp_eproc.e_vm.vm_map.size 或 ki_size ps -o vsz
pmem 实际内存百分比 根据 rss 计算 ps -o pmem
rss 常驻集大小 kp_eproc.e_vm.vm_rssize 或 ki_rssize ps -o rss
size 1 进程大小(代码 + 数据 + 堆栈) tsize + dsize + ssize
tsize 文本(代码)大小 kp_eproc.e_vm.vm_tsize 或 ki_tsize ps -o tsiz
dsize 数据大小 kp_eproc.e_vm.vm_dsize 或 ki_dsize ps -o dsiz
ssize 堆栈大小 kp_eproc.e_vm.vm_ssize 或 ki_ssize ps -o ssiz

Linux

请参阅下表,了解 Linux 上 memtype 参数支持的值。

支持的值 描述 /proc/<pid>/status 文件中的来源
vsize 1 虚拟内存大小 VmSize
pmem 实际内存百分比 (VmRSS/total_memory) * 100
rss 常驻集大小 VmRSS
data 数据段大小 VmData
exe 代码段大小 VmExe
hwm 常驻集峰值大小 VmHWM
lck 锁定内存大小 VmLck
lib 共享库大小 VmLib
peak 虚拟内存峰值大小 VmPeak
pin 固定页面大小 VmPin
pte 页表项大小 VmPTE
size 进程代码段 + 数据段 + 栈段的大小 VmExe + VmData + VmStk
stk 栈段大小 VmStk
swap 使用的交换空间大小 VmSwap

Linux 注意事项:

  1. 较旧的 Linux 内核不支持所有 memtype 值。 例如,Linux 2.4 内核不支持 hwm、pin、peak、pte 和 swap 值。
  2. 我们注意到,使用 proc.mem[...,...,...,...,data] 对 Zabbix agent active check 进程进行自我监控时,显示的值比 agent 的 /proc/<pid>/status 文件中 VmData 行报告的值大 4 kB。 在自我测量时,agent 的数据段会增加 4 kB,随后恢复到之前的大小。

Solaris

请参见下表中 Solaris 支持的 memtype 参数值。

支持的值 描述 psinfo 结构中的来源 尝试兼容的命令
vsize 1 进程映像大小 pr_size ps -o vsz
pmem 实际内存百分比 pr_pctmem ps -o pmem
rss 常驻集大小
该值可能被低估(请参见 man ps 中对 rss 的描述)。
pr_rssize ps -o rss
脚注

1 默认值.