FreeBSD के संसाधन सीमाओं के नोट्स
सर्वर
Published: 2022-08-10

मैं इसके बारे में बहुत संज्ञान में नहीं था, इसलिए मैंने थोड़ी खोजबीन की।

FreeBSD में RCTL का उपयोग करने के लिए, RACCT, RCTL समर्थित कर्नेल का उपयोग करें।
FreeBSD 13.1 का Generic कर्नेल सक्षम लगता है, इसलिए इसे loader.conf में सक्षम करें।

root@freebsd13:~ # grep -E 'RACCT|RCTL' /usr/src/sys/amd64/conf/GENERIC
options         RACCT                   # Resource accounting framework
options         RACCT_DEFAULT_TO_DISABLED # Set kern.racct.enable=0 by default
options         RCTL                    # Resource limits

# echo "kern.racct.enable=1" >> /boot/loader.conf
# reboot

rctl कमांड

rctl -a नियम जोड़ें
     -r हटाएं
     -u वर्तमान सीमा मान दिखाएँ
     -h मानव-पठनीय
     बिना किसी का नियमों की सूची दिखाएँ
     
     हटाना या सूची दिखाना user: या ::maxproc: जैसे फ़िल्टर द्वारा संभव है
     उदाहरण)
     # rctl user:
     user:admin:pcpu:deny=10

सीमाओं का दायरा

प्रक्रिया, उपयोगकर्ता, लॉगिनक्लास, जेल के स्तर पर सीमाएँ निर्धारित की जा सकती हैं।

  • प्रक्रिया स्तर पर सीमा निर्धारित करना

    # rctl -a process:<PID>:<resource>:<action>=<amount>
    
    • सीमा मान उप-प्रक्रियाओं में भी विरासत में मिलती है, लेकिन प्रक्रिया स्तर पर सीमित होती है।
  • उपयोगकर्ता स्तर पर सीमा निर्धारित करना

    # rctl -a user:<USER NAME>:<resource>:<action>=<amount>
    # rctl -a user:<UID>:<resource>:<action>=<amount>
    
  • उपयोगकर्ता को प्रक्रिया स्तर पर सीमा निर्धारित करना

    # rctl -a user:<USER NAME>:<resource>:<action>=<amount>/process
    # rctl -a user:<UID>:<resource>:<action>=<amount>/process
    

लॉगिनक्लास और जेल भी उस स्तर पर सीमित किए जा सकते हैं।

CPU

  • cputime

    • प्रक्रिया का CPU time (CPU निष्पादन समय) नियम में उपयोग करें
    • क्रिया के लिए log, devctl, sig आदि का उपयोग किया जा सकता है।
    • यदि PID का CPU उपयोग समय 100 सेकंड से अधिक हो जाता है, तो इसे लॉग में रिकॉर्ड करें
      # rctl -a process:<PID>:cputime:log=100
      
  • pcpu

    • CPU के 1 कोर प्रति प्रतिशत से निर्दिष्ट करें
    • top पर देखने से यह स्पष्ट रूप से सीमित नहीं होता, बल्कि औसत मूल्य सीमा मान बनता है।
    • 1 कोर पर CPU 20% की सीमा निर्धारित करें (2 कोर के लिए 200% आदि ठीक होना चाहिए।)
      # rctl -a process:<PID>:pcpu:deny=20
      

प्रक्रिया नियंत्रण

  • maxproc

    • निर्दिष्ट उपयोगकर्ता 5 प्रक्रियाओं से अधिक लॉन्च नहीं कर सकता (fork में विफलता)
      # rctl -a user:<USER NAME>:maxporc:deny=5
      
  • nthr

    • निर्दिष्ट उपयोगकर्ता 5 धागों से अधिक धागे नहीं चला सकता
      # rctl -a user:<USER NAME>:nthr:deny=5
      

अन्य भी मेमोरी आदि नियंत्रण से संबंधित कई विकल्प हो सकते हैं। पुनरारंभ करने पर, सेटिंग्स गायब हो जाती हैं, इसलिए यदि आप स्थायीकरण करना चाहते हैं तो इसे /etc/rctl.conf में लिखना उचित है।