[comment]: # ({4bf3e4ff-098d0431})
# 7 proc.mem 中 memtype 参数的说明 监控项

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

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

**memtype** 参数在 Linux、AIX、FreeBSD 和 Solaris 平台上受支持。

所有这些平台均支持 'memtype' 的三个常见值：`pmem`、`rss` 和 `vsize`。此外，某些平台还支持特定于平台的 'memtype' 值。

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

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

请参见下表中 AIX 系统上 'memtype' 参数支持的值。

| 支持的值 | 描述 | procentry64 结构中的来源 | 尝试兼容的目标 |
|--|------|--|--|
| vsize ^[脚注](proc_mem_notes#脚注)^ | 虚拟 memory 大小 | 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                        |                             |

[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'。为了匹配，你需要指定一个与此匹配的正则表达式 string 或者留空。

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

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

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

请查看下表中 FreeBSD 中 'memtype' 参数支持的值。

| 支持的值 | 描述 | 来自 kinfo\_proc 结构的源 | 尝试与以下命令兼容 |
|--|------|--|--|
| vsize           | 虚拟 memory 大小 | 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 ^[脚注](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 ^[脚注](proc_mem_notes#脚注)^ | 虚拟memory大小 | VmSize                            |
| pmem            | 实际内存使用百分比 | (VmRSS/总内存) \* 100             |
| rss             | 常驻内存集大小 | VmRSS                             |
| data            | 数据段大小 | VmData                               |
| exe             | 代码段大小 | VmExe                               |
| hwm             | 峰值常驻内存集大小 | VmHWM                           |
| lck             | 锁定内存大小 | VmLck                             |
| lib             | 共享库大小 | VmLib                              |
| peak            | 峰值虚拟memory大小 | 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主动检查进程进行自监控时，显示的值比agent的/proc/<pid>/status文件中`VmData`行报告的值大4 KB。在自测量期间，agent的数据段增加了4 KB，随后又恢复到先前大小。

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

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

请参见下表中 Solaris 系统上 'memtype' 参数支持的值。

| 支持的值 | 描述 | psinfo 结构中的来源 | 尝试兼容的命令 |
|--|------|--|--|
| vsize ^[脚注](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})
