כיצד להגביל את הזמן ואת שימוש הזיכרון של תהליכים בלינוקס

התסריט timeout הוא תוכנה לניטור משאבים שימושית להגבלת זמן וצריכת זיכרון של תהליכים בלינוקס. היא מאפשרת לך להריץ תוכניות בתחתית שליטה, ולהטיל הגבלות על זמן וזיכרון, ולסיים את התוכנית בעת הפרת הפרמטרים הללו.

אין צורך בהתקנה, פשוט הרץ פקודה יחד עם הארגומנטים שלה באמצעות התוכנה timeout והיא תנטר את צריכת הזמן והזיכרון של הפקודה, ותפסיק את התהליך אם הוא יוצא מגבולותיו, ותודיע לך עם הודעה מוגדרת מראש.

כדי להריץ את התסריט הזה, עליך להתקין את Perl 5 על מערכת הלינוקס שלך ולהריץ את מערכת הקבצים /proc מחוברת.

כדי לבדוק את הגרסה המותקנת של Perl על מערכת הלינוקס שלך, הרץ את הפקודה הבאה.

$ perl -v
Check Perl Version in Linux

לאחר מכן, שכפל את המאגר של timeout למערכת שלך באמצעות פקודת git, ואז העבר לתיקיית המאגר המקומית באמצעות פקודת cd והפעל אותה כפקודת לינוקס רגילה.

$ cd ~/bin
$ git clone https://github.com/pshved/timeout.git
$ cd timeout

כעת, בואו נסתכל על איך התסריט timeout עובד.הגבלת זיכרון בסיסית (100M של זיכרון וירטואלי):

גבול זיכרון בסיסי (100M של זיכרון וירטואלי):

הדוגמה הראשונה הזו מראה כיצד להגביל את שימוש התהליך בזיכרון ל100M של זיכרון וירטואלי, באמצעות הדגל -m. היחידה הברירת מחדל עבור זיכרון היא בקילובייט.

כאן, פקודת stress-ng פועלת 4 מתחים וירטואליים של זיכרון (VMS) שמשלבים לשימוש ב-40% מהזיכרון הזמין למשך 10 דקות. כך שכל מתח משתמש ב-10% מהזיכרון הזמין.

$ ./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Limiting Memory of Process

בהתחשב בפלט של פקודת timeout לעיל, הפועלים של stress-ng נמחקו אחרי רק 1.16 שניות. זאת מכיוון שהצריכה המשולבת של הזיכרון של VMS (438660 קילובייט) גדולה משימוש הזיכרון הוירטואלי המותר עבור stress-ng והפועלים הבניו.

גבול זמן בסיסי של תהליך:

כדי לאפשר גבול זמן של תהליך, השתמש בדגל -t כפי שמוצג.

$ ./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
Time Limiting of Process

בדוגמה לעיל, כאשר זמן stress-ng CPU+SYS עובר את הערך המוגדר של 4, הפועלים נהרגים.

הגבלת גם זמן וגם זיכרון של תהליך

אפשר גם להגביל גם זיכרון וגם זמן בבת אחת כך.

$ ./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

Timeout גם תומך בכמה אפשרויות מתקדמות כגון --detect-hangups, שמאפשר גילוי תשאות.

$ ./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

ניתן לעקוב אחרי המגבלת זיכרון RSS (resident set size) באמצעות המתג --memlimit-rss או -s.

$ ./timeout -m 100000 -s  stress-ng --vm 4 --vm-bytes 40% -t 10m

בנוסף, כדי לקבל קוד סיום או אות +128 של תהליך, יש להשתמש באפשרות --confess או -c כפי שמוצג.

$ ./timeout -m 100000 -c  stress-ng --vm 4 --vm-bytes 40% -t 10m

למידע נוסף ודוגמה לשימוש, ראה את המאגר של timeout ב-Github: https://github.com/pshved/timeout.

כמו כן, תוכל למצוא שימושיים גם את המאמרים הבאים:

  1. איך למצוא את התהליכים העליונים ביותר לפי שימוש בזיכרון עם 'top' במצב צינון
  2. CPUTool – הגבלת ושליטה בשימוש ב-CPU של כל תהליך ב-Linux
  3. איך להגביל את שימוש ה-CPU של תהליך ב-Linux עם כלי CPULimit

התסריט timeout הוא תוכנת מעקב

Source:
https://www.tecmint.com/limit-time-and-memory-usage-of-linux-process/