9. Заметки о параметре «тип памяти» в элементах данных proc.mem

Обзор

Параметр тип памяти поддерживается на платформах Linux, AIX, FreeBSD и Solaris.

Три общих значения параметра «тип памяти» поддерживаются на всех этих платформах: pmem, rss и vsize. Кроме того, для некоторых платформ поддерживаются специфичные для этих платформ значения «типа памяти».

AIX

Значения, поддерживаемые для параметра «тип памяти» на AIX, смотри в таблице.

Поддерживаемое значение Описание Источник в структуре 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:

  1. При выборе параметров для ключа элемента данных proc.mem[] на AIX, попытайтесь указать узкие критерии выбора процесса. В противном случае есть риск того, что в результат proc.mem[] окажутся сосчитаны нежелательные процессы.

Пример:

$ zabbix_agentd -t proc.mem[,,,НесуществующийПроцесс,rss]
       proc.mem[,,,НесуществующийПроцесс,rss]           [u|2879488]

Данный пример иллюстрирует, как указание только параметра командной строки (в виде регулярного выражения) приводит к тому, что Zabbix агент считает и себя тоже - вероятно, это не то, чего хотелось.

  1. Не используйте «ps -ef» для просмотра процессов — он показывает только процессы, не относящиеся к ядру. Используйте «ps -Af», чтобы увидеть все процессы, которые будет видеть агент Zabbix.

  2. Давайте рассмотрим пример «topasrec», как proc.mem[] агента Zabbix выбирает процессы.

$ ps -Af | grep topasrec
       root 1074798410Mar 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[<имя>,<пользователь>,<режим>,<cmdline>,<тип памяти>]

Первый критерий — имя процесса (аргумент <имя>). В нашем примере агент Zabbix увидит его как «topasrec». Для соответствия вам нужно либо указать «topasrec», либо оставить его пустым. Второй критерий — имя пользователя (аргумент <пользователь>). Для соответствия вам нужно либо указать «root», либо оставить его пустым. Третий критерий, используемый при выборе процесса, — это аргумент <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». Для сопоставления вам нужно либо указать регулярное выражение, соответствующее этой строке, либо оставить его пустым.

Аргументы <режим> и <тип памяти> применяются после использования трёх критериев, упомянутых выше.

FreeBSD

Значения, поддерживаемые для параметра «тип памяти» на FreeBSD, смотрите в таблице.

Поддерживаемое значение Описание Источник в структуре 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, смотрите в таблице.

Поддерживаемое значение Описание Источник в файле /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:

  1. Не все значения параметра «тип памяти» поддерживаются старыми версиями ядер Linux. Например, ядра Linux 2.4 не поддерживают значения hwm, pin, peak, pte и swap.
  2. Мы заметили, что процесс само-диагностики активных проверок Zabbix агента с proc.mem[...,...,...,...,data] отображает значение, которое на 4 КБ больше, чем отдаёт строка VmData в файле агента /proc/<pid>/status. Во время измерения себя сегмент данных агента увеличивается на 4 КБ и затем возвращается к предыдущему размеру.

Solaris

Значения, поддерживаемые для параметра «тип памяти» на Solaris, смотрите в таблице.

Поддерживаемое значение Описание Источник в структуре psinfo Пытается быть совместимым с
vsize 1 Размер образа процесса pr_size ps -o vsz
pmem Процент физической памяти pr_pctmem ps -o pmem
rss Размер резидентного набора
Он может быть недооценён - см. описание rss в «man ps».
pr_rssize ps -o rss
Примечания

1 Значение по умолчанию.