[comment]: # translation:outdated

[comment]: # ({4bf3e4ff-098d0431})
# 7  proc.mem 监控项中内存参数类型

[comment]: # ({/4bf3e4ff-098d0431})

[comment]: # ({2840c113-2840c113})
#### 概述

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

'memtype' 参数的三个常用值：`pmem`、 `rss` 和 `vsize`。另外，在一些系统中只支持该系统下的 'memtype' 值。

[comment]: # ({/2840c113-2840c113})

[comment]: # ({c30765ae-04a03696})
#### AIX

请参阅表中 AIX 上 'memtype' 参数支持的值。

|支持值|说明|来源为 procentry64 结构|尽量兼容|
|--|------|--|--|
|vsize ^[1](proc_mem_notes#脚注)^|虚拟内存大小|pi\_size| |
|pmem|实际内存百分比|pi\_prm|ps -o pmem|
|rss|常驻集大小|pi\_trss + pi\_drss|ps -o rssize|
|size|进程大小（代码 + 数据）|pi\_dvm|"ps gvw" SIZE column|
|dsize|数据大小|pi\_dsize|<|
|tsize|文本（代码）大小|pi\_tsize|"ps gvw" TSIZ column|
|sdsize|共享库的数据大小|pi\_sdsize|<|
|drss|数据常驻集大小|pi\_drss| |
|trss|文本常驻集大小|pi\_trss| |

[comment]: # ({/c30765ae-04a03696})

[comment]: # ({b262d0c5-cc0df248})

AIX平台注意事项：

1.  在 AIX 上为 proc.mem[] 监控项选择参数时，尝试指定狭窄的流程选择标准。 否则，存在将不需要的进程计入 proc.mem[] 结果的风险。

例如：
```
$ zabbix_agentd -t proc.mem[,,,NonExistingProcess,rss]
proc.mem[,,,NonExistingProcess,rss]           [u|2879488]
```

此示例展示了仅指定命令行（要匹配的正则表达式）参数如何导致 Zabbix  agent 自记账 - 可能不是您想要的。

[comment]: # ({/b262d0c5-cc0df248})

[comment]: # ({87cd17df-14c4cc2b})
2. 不要使用 "ps -ef" 浏览进程 - 它只显示非内核进程。使用 "ps -Af" 查看 Zabbix agent 将看到的所有进程。

3. 让我们看一下 "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>]
```

[comment]: # ({/87cd17df-14c4cc2b})

[comment]: # ({3fe2ad6d-0be32659})

第一个条件是进程名称（参数 <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> 在使用上述三个条件后被应用。

[comment]: # ({/3fe2ad6d-0be32659})

[comment]: # ({c2004450-8a700330})
#### 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](proc_mem_notes#脚注)^|进程大小（代码+数据+堆栈）|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|

[comment]: # ({/c2004450-8a700330})

[comment]: # ({9164d2d0-f43d1dfd})
#### Linux

请参见表中Linux上的 'memtype' 参数支持的值。

|支持值|说明|来源为 /proc/<pid>/status 文件|
|--|------|--|
|vsize ^[1](proc_mem_notes#脚注)^|虚拟内存大小|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.  我们发现 Zabbix agent 主动检查进程参数 `proc.mem[...,...,...,...,data]` 显示的值比 agent 的 /proc/\<pid>/status 文件 `VmData` 行的值大4kB。 在agent自我监控管理时，agent的数据碎片增长率4 kB ，然后又返回到先前的值。

[comment]: # ({/9164d2d0-f43d1dfd})

[comment]: # ({d8c5e366-96fd9f28})
#### Solaris

请参见表中的Solaris上的 'memtype' 参数所支持的值。

|支持值|说明|来源为 psinfo 结构|尽量兼容|
|--|------|--|--|
|vsize ^[1](proc_mem_notes#脚注)^|进程镜像的大小|pr\_size|ps -o vsz|
|pmem|实际内存的百分比|pr\_pctmem|ps -o pmem|
|rss|驻留集大小<br>可能被低估了 - 请参阅“man ps”中的 rss 描述。.|pr\_rssize|ps -o rss|

[comment]: # ({/d8c5e366-96fd9f28})

[comment]: # ({e0ce8129-e0ce8129})
##### 脚注

^**1**^ 默认值.

[comment]: # ({/e0ce8129-e0ce8129})
