9 Notes on selecting processes in proc.mem and proc.num items

הערות שוליים

1 ערך ברירת מחדל.

שרשורי ליבת לינוקס

לא ניתן לבחור שרשורים עם פרמטר cmdline בפריטים proc.mem[] ו-proc.num[]

ניקח כדוגמה את אחד משרשורי הקרנל:

 $ ps -ef| grep kthreadd
 שורש 2 0 0 09:33 ? 00:00:00 [kthreadd]

ניתן לבחור אותו עם פרמטר 'שם' של התהליך:

 $ zabbix_get -s localhost -k 'proc.num[kthreadd,root]'
 1

אבל בחירה לפי פרמטר 'cmdline' של תהליך לא עובד:

 $ zabbix_get -s localhost -k 'proc.num[,root,,kthreadd]'
 0

הסיבה היא שסוכן Zabbix לוקח את הביטוי הרגולרי שצוין בפרמטר cmdline ומחיל אותו על תוכן התהליך /proc/<pid>/cmdline. עבור שרשורי ליבה שלהם /proc/<pid>/cmdline הקבצים ריקים. אז פרמטר 'cmdline' אף פעם לא תואם.

ספירת שרשורים בפריטי proc.mem[] ו-proc.num[]

שרשורי ליבת לינוקס נספרים לפי פריט proc.num[] אך אינם מדווחים זיכרון בפריט proc.mem[]. לדוגמה:

 $ ps -ef | grep kthreadd
 שורש 2 0 0 09:51 ? 00:00:00 [kthreadd]

 $ zabbix_get -s localhost -k 'proc.num[kthreadd]'
 1

 $ zabbix_get -s localhost -k 'proc.mem[kthreadd]'
 ZBX_NOTSUPPORTED: לא ניתן לקבל כמות זיכרון "VmSize".

אבל מה קורה אם יש תהליך משתמש באותו שם כמו א חוט ליבה? ואז זה יכול להיראות כך:

 $ ps -ef | grep kthreadd
 שורש 2 0 0 09:51 ? 00:00:00 [kthreadd]
 zabbix 9611 6133 0 17:58 נקודות/1 00:00:00 ./kthreadd

 $ zabbix_get -s localhost -k 'proc.num[kthreadd]'
 2

 $ zabbix_get -s localhost -k 'proc.mem[kthreadd]'
 4157440

proc.num[] ספר גם את שרשור הליבה וגם את תהליך המשתמש. proc.mem[] מדווח על זיכרון עבור תהליך המשתמש בלבד וסופר את זיכרון פתיל ליבה כאילו הוא 0. זה שונה מהמקרה לעיל כאשר דווח על ZBX_NOTSUPPORTED.

היזהר בעת שימוש בפריטים proc.mem[] ו-proc.num[] אם התוכנית שם במקרה תואם לאחד מהשרשור.

לפני שמכניסים פרמטרים לפריטים proc.mem[] ו-proc.num[], אתה אולי תרצה לבדוק את הפרמטרים באמצעות הפריט proc.num[] ו-ps פקודה.