proc.mem アイテムの memtype パラメーターに関する注意事項
概要
memtype パラメータは、Linux、AIX、FreeBSD、Solarisの各プラットフォームでサポートされています。
これらすべてのプラットフォームでは、pmem、rss、vsize の3つの一般的な memtype 値がサポートされています。
さらに、一部のプラットフォームでは、プラットフォーム固有の 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 エージェント自身がカウントされることを示しています。これはおそらく意図した結果ではありません。
-
プロセスの確認に
ps -efを使用しないでください。カーネル以外のプロセスのみが表示されます。Zabbix エージェントから認識できるすべてのプロセスを確認するには、ps -Afを使用します。 -
topasrecを例に、Zabbix エージェントの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>]
条件は次のとおりです。
- 1つ目の条件は、プロセス名(引数
<name>)です。 この例では、Zabbixエージェントはこれをtopasrecと認識します。一致させるには、topasrecを指定するか、空のままにします。 - 2つ目の条件は、ユーザー名(引数
<user>)です。 一致させるには、rootを指定するか、空のままにします。 - プロセス選択で使用される3つ目の条件は、引数
<cmdline>です。 Zabbixエージェントは、その値を/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> は、上記の3つの条件を使用した後に適用されます。
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エージェントのアクティブチェックプロセスを自己監視すると、エージェントの/proc/<pid>/statusファイルのVmData行で報告される値より4 kB大きい値が表示されることを確認しています。 自己測定の時点では、エージェントのデータセグメントが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 デフォルト値