[comment]: # ({7534a4a0-7534a4a0})
# 9 proc.mem 监控项中 memtype 参数的使用说明

[comment]: # ({/7534a4a0-7534a4a0})

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

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

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

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

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

查看AIX系统中'memtype'参数支持的值如下表所示.

| 支持的值 | 描述 | 在procentry64结构中的来源 | 尝试兼容的对象 |
|--|------|--|--|
| vsize ^[1](proc_mem_notes#脚注)^ | 虚拟memory大小 | pi\_size                        |                             |
| pmem            | 实际memory的百分比 | 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-59b8a022})


AIX系统注意事项：

1. 在AIX系统上为proc.mem[] 监控项监控项选择参数时，应尽量指定精确的进程筛选条件。否则可能导致不相关进程被计入proc.mem[]的统计结果。

示例：

```$ zabbix_agentd -t proc.mem[,,,NonExistingProcess,rss]
proc.mem[,,,NonExistingProcess,rss]           [u|2879488]
```
此示例表明仅指定命令行（正则表达式匹配）参数会导致Zabbix agent自身进程被计入统计——这通常不是您期望的结果。

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

[comment]: # ({87cd17df-7ade81f5})
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-7ade81f5})

[comment]: # ({3fe2ad6d-2cc10070})


第一个筛选条件是进程名称（参数<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-2cc10070})

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

查看FreeBSD上'memtype'参数支持的值，请参考下表。

| 支持的值 | 描述 | kinfo\_proc结构中的来源 | 尝试兼容的目标 |
|--|------|--|--|
| vsize           | 虚拟memory大小 | kp\_eproc.e\_vm.vm\_map.size 或 ki\_size | ps -o vsz                   |
| pmem            | 实际memory百分比 | 根据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 中的来源 file |
|--|------|--|
| vsize ^[1](proc_mem_notes#脚注)^ | 虚拟 memory 大小 | VmSize                                       |
| pmem            | 实际内存使用百分比 memory | (VmRSS/总内存) \* 100                 |
| rss             | 驻留集大小       | VmRSS                                        |
| data            | 数据段大小          | VmData                                       |
| exe             | 代码段大小          | VmExe                                        |
| hwm             | 峰值常驻内存集大小 | VmHWM                                        |
| lck             | 锁定的memory大小 | VmLck                                        |
| lib             | 共享库大小              | VmLib                                        |
| peak            | 峰值虚拟 memory 大小 | VmPeak                                       |
| pin             | 固定页面大小        | VmPin                                        |
| pte             | 页表条目大小              | VmPTE                                        |
| 大小            | 进程代码+数据+堆栈段的总大小                | VmExe + VmData + VmStk                       |
| stk             | 栈段大小             | VmStk                                        |
| swap            | 已使用的交换空间大小 | VmSwap                                       |

Linux注意事项:

1. 并非所有'memtype'值都被旧版Linux内核支持。
    例如，Linux 2.4内核不支持`hwm`、`pin`、`peak`，
    `pte` 和 `swap` 值。
2.  我们注意到Zabbix agent活跃项的自我监控
    使用`proc.mem[...,...,...,...,data]`检查进程显示一个值
    比`VmData`行在agent中报告的大4 kB
    /proc/<pid>/status file. 在自测量时
    agent的数据段增加4 kB后恢复原状
    previous size.
之前的尺寸.

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

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

查看Solaris系统中'memtype'参数支持的值如下表所示。

| 支持的值 | 描述 | psinfo结构体中的来源 | 尝试兼容的命令 |
|--|------|--|--|
| vsize ^[1](proc_mem_notes#脚注)^ | 进程映像大小 | pr\_size                   | ps -o vsz                   |
| pmem            | 实际memory的百分比 | 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})
