10 הערות על בחירת תהליכים בפריטי proc.mem ו־proc.num

הערות שוליים

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 פקודה.