एक संपूर्ण उपयोगकर्ता को 10% से कम के सीपीयू तक सीमित कैसे करें, न कि केवल प्रक्रिया?


10

मैं सेंटोस, cpanel / whm चला रहा हूं, और मेरे पास cpulimit इंस्टॉल है।

जो समस्या मुझे हो रही है, वह मेरे उपयोगकर्ताओं में से एक है जो अत्यधिक मात्रा में सीपीयू उपयोग कर रहा है। 100% से अधिक लगातार और यह मेरे सर्वर को धीमा कर रहा है।

इसके अलावा समस्या यह है कि वे एक दोस्त हैं और दुर्भावनापूर्ण नहीं हैं इसलिए मैं उन्हें निलंबित नहीं करना चाहता।

इसके अलावा जो एक समस्या है वह यह है कि मैं इसे प्रक्रिया द्वारा सीमित नहीं कर सकता, क्योंकि यह प्रक्रिया हर पल बदलती है। यह हर बार एक अलग प्रक्रिया है।

मैं निम्नलिखित की कोशिश की, लेकिन यह काम नहीं करता है।

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

मैं अभी लौटा हूँ,

No process found
No process found
No process found
No process found
No process found
No process found

आदि

दो चीजें हैं जो उस चरम सीपीयू उपयोग का उपयोग कर रही हैं।

पहली बात, उस स्थान पर उस फ़ाइल है index.php। अन्य [php] है, जो भी WHM में इसका मतलब है। लेकिन मुख्य रूप से index.phpयही समस्या है।

अगर मैं उस index.phpफ़ाइल को उस स्थान पर सीमित कर सकता था , जो इस समस्या को कम करने में मदद कर सकता है।

वैसे, मैंने -Pध्वज की कोशिश की, लेकिन यह प्रलेखन के विपरीत एक विकल्प के रूप में उपलब्ध नहीं है।

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

रिटर्न

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

तो ऐसा लगता है कि मुझे इसे -eध्वज के साथ करना होगा ।

आदर्श रूप से हालाँकि मैं संपूर्ण उपयोगकर्ता खाते को सीमित करना चाहूंगा।

और हाँ मुझे क्लाउडलिन के बारे में पता है लेकिन मैं अभी ऐसा नहीं कर सकता। जब तक मैं यह कर सकता हूं कि मुझे इसे मैन्युअल रूप से कुछ ऐसा करने में मदद करने की आवश्यकता है जो सर्वर रिबूट की आवश्यकता नहीं है।

जवाबों:


1

आप सही हैं कि आप एक प्रक्रिया (पीआईडी) का उपयोग करके अपने दोस्त को सीमित नहीं कर सकते हैं, अपाचे प्रत्येक अनुरोध के लिए एक नई प्रक्रिया (वर्कर) पैदा करता है, जो हर बार एक नया पीआईडी ​​असाइन करता है।

आपके द्वारा सेटअप किए गए PHP हैंडलर के आधार पर WHM -> MultiPHP Manager -> PHP Handlers, Apache या तो PHP स्क्रिप्ट्स को स्वयं चलाएगा, या उन्हें उस उपयोगकर्ता के रूप में चलाएगा जो फ़ाइल का मालिक है। यदि आप suPHPहैंडलर के रूप में उपयोग करते हैं , तो PHP प्रक्रिया को फ़ाइल के मालिक के रूप में निष्पादित किया जाएगा।

यदि स्क्रिप्ट स्वामी द्वारा निष्पादित की जाती है, तो आप /etc/security/limits.confफ़ाइल में जोड़कर सीपीयू उपयोग को एक खाते में सीमित कर सकते हैं । हालांकि आप इसका उपयोग सीपीयू प्रतिशत को सीमित करने के लिए नहीं कर सकते हैं, आप उनके 'अच्छे' मूल्य को संशोधित कर सकते हैं ताकि उनकी प्रक्रियाएं सर्वर पर अन्य प्रक्रियाओं की तुलना में कम प्राथमिकता ले सकें। जैसे, अन्य प्रक्रियाओं को लंबे समय तक इंतजार नहीं करना पड़ेगा।

मैंने कभी भी इसका उपयोग नहीं किया है (मैं CloudLinux चलाता हूं), लेकिन मेरा मानना ​​है कि निम्नलिखित प्रविष्टि को समस्या के साथ मदद करनी चाहिए :

username    hard    priority    30

यह उपयोगकर्ता द्वारा निष्पादित प्रक्रियाओं के लिए अधिकतम प्राथमिकता निर्धारित करता है। मैं जो समझता हूं, वास्तव में उच्च प्राथमिकता का मतलब है कि अन्य प्रक्रियाओं (कम प्राथमिकता के साथ) को अधिक सीपीयू समय मिलता है।

CPanel पर चलने वाले मेरे सर्वर पर, अधिकांश प्रक्रियाओं में 20 की प्राथमिकता होती है, इसलिए उपरोक्त तर्क का पालन करते हुए, उस उपयोगकर्ता की प्राथमिकता को 30 तक सेट करने के लिए इन प्रक्रियाओं से पहले अन्य प्रक्रियाओं को निष्पादित करने की अनुमति देनी चाहिए।


7

क्या आपने Cgroups की कोशिश की है ?


  • सेवा स्थापित करें sudo yum install libcgroupऔर इसे शुरू करें sudo service cgconfig start
  • जिसके बाद चलकर cgroups के लिए सबसिस्टम कॉन्फ़िगरेशन देखें sudo ls /cgroup

नाम से एक cgroup बनाएँ limitcpu। समूह के साथ शुरू होने वाली रेखाएं cgroups बनाती हैं और सबसिस्टम पैरामीटर सेट करती हैं।

उदाहरण /etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

सीपीयू को सीमित करने के लिए कुछ ट्यून करने योग्य पैरामीटर हैं जो आप ब्लशेंट सीपीयू उपयोग को सीमित करने के लिए उपयोग कर सकते हैं

यदि एक cgroup में कार्य हर 1 सेकंड में से 0.1 (10%) सेकंड के लिए एक एकल CPU तक पहुँचने में सक्षम होना चाहिए, cpu.cfs_quota_us को 100000 पर सेट करें और cpu.cfs_period_us को 1000000 पर सेट करें।


Cgred एक ऐसी सेवा है (जो cgrulesengd सेवा शुरू करती है) जो /etc/cgrules.conf फ़ाइल में निर्धारित मापदंडों के अनुसार कार्यों को cgroups में ले जाती है। /Etc/cgrules.conf फ़ाइल में प्रविष्टियाँ इन दो रूपों में से एक ले सकती हैं:

user subsystems control_group
user:command subsystems control_group

जहां userउपयोगकर्ता नाम या "@" वर्ण के साथ उपसर्ग समूह का नाम है। subsystemsउप-नाम के अल्पविराम से अलग सूची के साथ बदलें control_group, cgroup के लिए एक पथ का प्रतिनिधित्व करता है, और commandएक प्रक्रिया नाम या एक प्रक्रिया के पूर्ण कमांड पथ के लिए खड़ा है।

उदाहरण आदि / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxकिसी भी उपयोगकर्ता द्वारा चलाई जाने वाली प्रक्रिया स्वचालित रूप से ब्राउज़रों में जुड़ जाएगी cgroupऔर सीपीयू और मेमोरी सबसिस्टम में सीमित हो जाएगी।

  • memhogadminसमूह में किसी के द्वारा चलाई जाने वाली प्रक्रिया को cgroup में जोड़ा जाएगा limitmemऔर मेमोरी सबसिस्टम में सीमित किया जाएगा।

    - आपका उपयोगकर्ता, cpuhogcgroup 'limitcpu' में जोड़ा जाएगा और cpu सबसिस्टम में सीमित होगा।


अग्रिम उपयोग के मामलों में, आप इसके बजाय किसी टेम्पलेट का उपयोग करने का प्रयास कर सकते हैं।

उदाहरण के लिए, /etc/cgconfig.conf में निम्नलिखित टेम्पलेट निर्दिष्ट करें:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

फिर /etc/cgrules.conf प्रविष्टि की तीसरी पंक्ति में उपयोगकर्ताओं /% g /% u टेम्पलेट का उपयोग करें, जो इस प्रकार देख सकते हैं:

peter:ftp       cpu     users/%g/%u

%g and %uइसके बाद के संस्करण का इस्तेमाल किया चर स्वचालित रूप से समूह और उपयोगकर्ता नाम एफ़टीपी प्रक्रिया के मालिक पर निर्भर करता है के साथ बदल रहे हैं।

यदि प्रक्रिया व्यवस्थापन समूह के याचिकाकर्ता की है, तो उपरोक्त पथ का अनुवाद किया जाता है users/adminstaff/peter

Cgred सेवा तब इस निर्देशिका को खोजती है, और यदि यह मौजूद नहीं है, तो cgred इसे बनाता है और उपयोगकर्ताओं / adminstaff / peter / कार्यों को प्रक्रिया असाइन करता है।

ध्यान दें कि टेम्प्लेट नियम केवल कॉन्फ़िगरेशन फ़ाइलों में टेम्प्लेट की परिभाषाओं पर लागू होते हैं, इसलिए भले ही "समूह उपयोगकर्ता / व्यवस्थापक / याचिकाकर्ता" को /etc/cgconfig.conf में परिभाषित किया गया हो, इसे "टेम्प्लेट उपयोगकर्ता"% g /% के पक्ष में अनदेखा किया जाएगा यू "।

डिजिटल महासागर द्वारा ट्यूटोरियल।

नियंत्रण समूहों का परिचय।


0

आप संभवत: /etc/security/limits.conf को सेटअप करने का प्रयास कर सकते हैं। वहां आपको यह समायोजित करने में सक्षम होना चाहिए कि उपयोगकर्ता कितना सीपीयू समय और मेमोरी का उपभोग कर सकता है। विवरण के लिए https://linux.die.net/man/5/limits.conf देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.