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 注意事项:
- 在 AIX 上为
proc.mem[]监控项键选择参数时,请尽量指定精确的进程选择条件。 否则,可能会将不需要的进程计入proc.mem[]结果。
示例:
$ zabbix_agentd -t proc.mem[,,,NonExistingProcess,rss]
proc.mem[,,,NonExistingProcess,rss] [u|2879488]
此示例表明,仅指定命令行(用于匹配的正则表达式)参数会导致 Zabbix agent 将自身计入统计结果,这可能不是您想要的结果。
-
不要使用
ps -ef浏览进程——它只显示非内核进程。请使用ps -Af查看 Zabbix agent 能够看到的所有进程。 -
下面以
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 注意事项:
- 较旧的 Linux 内核不支持所有
memtype值。 例如,Linux 2.4 内核不支持hwm、pin、peak、pte和swap值。 - 我们注意到,使用
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 默认值.