לפעמים, האפשרות לשים או לשחרר מגבלות על תהליכים רצים במערכת, יכול להיות שימושי מאוד.
כשמדובר בשרת עם כמה משתמשים או כמה שרותים שרצים במקביל, משתמש או שרות שחורג, יכול להריץ כמות גדולה של Processes/Threads ולגמור את משאבי המערכת. מצד שני, במערכת עם שרות יחיד, הגבלת כמות ה-Processes/Threads יכולה להביא את השרות לרוויה, ובעצם למצב של DoS.
במערכות לינוקס ניתן להגביל או להרחיב את כמות ה-Processes/Threads שמותר למשתמש יחיד להריץ דרך הקובץ
/etc/security/limits.conf
הקובץ הוא חלק מחבילת ה-PAM הסטנדרטית ונקרא ע"י pam_limits.so. במערכות מבוססות RedHat/Debian, המודול pam_limits מופעל כברירת מחדל.
כדי להגביל את כמות המשאבים של משתמש, נערוך את limits.conf, ונוסיף את ההגדרה עבור הקבוצה המתאימה. במידה וישנה יותר משורה אחת שתואמת את המשתמש, הסדר הבא קובע גם את העדיפות. קבוצות אפשריות הן:
- משתמש – user
- קבוצה – @group
- כולם – *
ישנן 3 סוגי הגבלות:
- soft – הגבלה שניתן לחצות, בד"כ תופיע הודעה
- hard – גבול עליון אותו אי אפשר לחצות
- "-" – גבול עליון אשר כולל את soft ו-hard
כמה דוגמאות אפשריות הן:
user soft nproc 500
user hard nproc 1000
@group – nproc 500
* - nproc 100
הערך nproc יקבע את כמות ה-Processes/Threads שמשתמש יוכל להריץ.
לתשומת ליבכם: לצורך העניין, במערכות מבוססות לינוקס, Thread ו-Process הם אחד. אם מדובר בהגבלת מערכות שהן multi-threaded, כמו מערכות מבוססות Java, יש לקחת בחשבון שמספר ה-Processes שבשימוש הוא גבוהה מהנראה ע"י תוכנות כמו "top" בברירת מחדל.
דרך מהירה לקבוע את כמות ה-Threads שמריץ שרות מסויים היא בעזרת הפקודה "ps":
ps -eLf | grep <PID> | wc -l
אז אם אתם רוצים להגדיל או להגביל, pam_limits הוא חברכם הטוב.
מאזין ל: Paloma Faith - New York