วิธี จำกัด ผู้ใช้ทั้งหมดให้น้อยกว่า 10% ของ cpu ไม่ใช่แค่ดำเนินการ?


10

ฉันใช้ centos, cpanel / whm และฉันได้ติดตั้ง cpulimit แล้ว

ปัญหาที่ฉันมีอยู่คือหนึ่งในผู้ใช้ของฉันกำลังใช้งาน cpu จำนวนมาก มากกว่า 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

ฯลฯ

มีสองสิ่งที่กำลังใช้การใช้ cpu มาก

อย่างแรกคือไฟล์นั้นที่ตำแหน่งนั้น, 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ธง

อย่างไรก็ตามฉันต้องการ จำกัด บัญชีผู้ใช้ทั้งหมด

และใช่ฉันรู้เกี่ยวกับ cloudlinux แต่ตอนนี้ฉันไม่สามารถทำได้ จนกระทั่งฉันสามารถทำสิ่งนั้นได้ฉันต้องการความช่วยเหลือในการทำสิ่งที่ไม่ต้องรีบูตเซิร์ฟเวอร์

คำตอบ:


1

คุณถูกต้องที่คุณไม่สามารถ จำกัด เพื่อนของคุณโดยใช้กระบวนการ (PID), Apache จะสร้างกระบวนการใหม่ (ผู้ปฏิบัติงาน) สำหรับทุกคำขอที่ได้รับโดยมอบหมาย PID ใหม่ทุกครั้ง

WHM -> MultiPHP Manager -> PHP HandlersApache จะเรียกใช้สคริปต์ PHP ด้วยตนเองหรือเรียกใช้งานในฐานะผู้ใช้ที่เป็นเจ้าของไฟล์ทั้งนี้ขึ้นอยู่กับเครื่องมือจัดการ PHP ที่คุณติดตั้ง หากคุณใช้suPHPเป็นตัวจัดการกระบวนการ PHP จะถูกดำเนินการโดยบัญชีที่เป็นเจ้าของไฟล์

หากเจ้าของสคริปต์ดำเนินการคุณสามารถ จำกัด การใช้ cpu ไปยังบัญชีโดยเพิ่มลงใน/etc/security/limits.confไฟล์ ในขณะที่คุณไม่สามารถใช้สิ่งนี้เพื่อ จำกัด เปอร์เซ็นต์ cpu ได้อย่างแน่นอนคุณสามารถปรับเปลี่ยนค่า 'ดี' เพื่อให้กระบวนการมีลำดับความสำคัญต่ำกว่ากระบวนการอื่น ๆ บนเซิร์ฟเวอร์ ดังนั้นกระบวนการอื่น ๆ จึงไม่ต้องรอนาน

ฉันไม่เคยใช้สิ่งนี้ด้วยตัวเอง (ฉันเรียกใช้ CloudLinux) แต่ฉันเชื่อว่ารายการต่อไปนี้น่าจะช่วยแก้ปัญหาได้:

username    hard    priority    30

สิ่งนี้ตั้งค่าลำดับความสำคัญสูงสุดสำหรับกระบวนการที่ดำเนินการโดยผู้ใช้ถึง 30 จากสิ่งที่ฉันเข้าใจความสำคัญที่สูงกว่าจริง ๆ แล้วหมายถึงกระบวนการอื่น ๆ (ที่มีลำดับความสำคัญต่ำกว่า) จะได้รับเวลา CPU มากขึ้น

บนเซิร์ฟเวอร์ของฉันใช้ cPanel กระบวนการส่วนใหญ่มีลำดับความสำคัญเป็น 20 ดังนั้นตามตรรกะข้างต้นการตั้งค่าระดับความสำคัญสำหรับผู้ใช้ถึง 30 ควรอนุญาตให้กระบวนการอื่นดำเนินการก่อนกระบวนการเหล่านี้


7

คุณเคยลองCgroupsไหม?


  • ติดตั้งบริการและเริ่มต้นsudo yum install libcgroupsudo service cgconfig start
  • หลังจากนั้นดูการกำหนดค่าระบบย่อยสำหรับกลุ่ม cg โดยการเรียกใช้ sudo ls /cgroup

สร้าง cgroup limitcpuที่ชื่อว่า บรรทัดที่เริ่มต้นด้วยกลุ่มสร้าง cgroups และตั้งค่าพารามิเตอร์ระบบย่อย

ตัวอย่าง /etc/cgconfig.conf:

group limitcpu{

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

        }
}

สำหรับ CPU ที่ จำกัด มีพารามิเตอร์ที่ปรับค่าได้สองอย่างที่คุณสามารถใช้เพื่อ จำกัด การใช้งาน CPU ที่โจ่งแจ้ง

หากงานในกลุ่ม cgroup สามารถเข้าถึง CPU เดี่ยวเป็นเวลา 0.1 (10%) วินาทีจากทุก ๆ 1 วินาทีให้ตั้งค่า cpu.cfs_quota_us เป็น 100000 และ cpu.cfs_period_us เป็น 1000000


Cgred เป็นบริการ (ซึ่งเริ่มบริการ cgrulesengd) ที่ย้ายงานไปยัง cgroups ตามพารามิเตอร์ที่ตั้งค่าในไฟล์ /etc/cgrules.conf รายการในไฟล์ /etc/cgrules.conf สามารถใช้หนึ่งในสองรูปแบบต่อไปนี้:

user subsystems control_group
user:command subsystems control_group

ตำแหน่งที่userมีชื่อผู้ใช้หรือชื่อกลุ่มนำหน้าด้วยอักขระ "@" แทนที่subsystemsด้วยรายการชื่อระบบย่อยที่คั่นด้วยเครื่องหมายจุลภาคcontrol_groupแทนพา ธ ไปยัง cgroup และcommandย่อมาจากชื่อกระบวนการหรือเส้นทางคำสั่งแบบเต็มของกระบวนการ

ตัวอย่าง etc / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxกระบวนการที่ดำเนินการโดยผู้ใช้จะถูกเพิ่มลงในเบราว์เซอร์โดยอัตโนมัติcgroupและถูก จำกัด ในระบบย่อย cpu และหน่วยความจำ

  • memhogกระบวนการที่ดำเนินการโดยทุกคนในadminกลุ่มจะถูกเพิ่มลงใน cgroup limitmemและถูก จำกัด ในระบบย่อยหน่วยความจำ

    - ผู้ใช้ของคุณcpuhogจะถูกเพิ่มใน cgroup 'limitcpu' และถูก จำกัด ในระบบย่อย cpu


ในกรณีใช้งานล่วงหน้าคุณสามารถลองใช้เทมเพลตแทน

ตัวอย่างเช่นระบุเทมเพลตต่อไปนี้ใน /etc/cgconfig.conf:

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

จากนั้นใช้เท็มเพลต users /% g /% u ในแถวที่สามของรายการ /etc/cgrules.conf ซึ่งสามารถดูได้ดังนี้:

peter:ftp       cpu     users/%g/%u

%g and %uตัวแปรที่ใช้ดังกล่าวข้างต้นจะถูกแทนที่โดยอัตโนมัติกับกลุ่มและชื่อผู้ใช้ขึ้นอยู่กับเจ้าของของกระบวนการของ FTP

หากกระบวนการเป็นของปีเตอร์จากกลุ่ม adminstaff users/adminstaff/peterที่เส้นทางดังกล่าวข้างต้นจะแปลให้

เซอร์วิส cgred จะค้นหาไดเร็กทอรีนี้และหากไม่มีอยู่ cgred จะสร้างขึ้นและกำหนดกระบวนการให้กับผู้ใช้ / adminstaff / peter / task

โปรดทราบว่ากฎเทมเพลตใช้เฉพาะกับคำจำกัดความของเทมเพลตในไฟล์การกำหนดค่าดังนั้นแม้ว่าจะมีการกำหนด "ผู้ใช้กลุ่ม / adminstaff / peter" ใน /etc/cgconfig.conf ก็จะถูกละเว้นในความโปรดปรานของ "ผู้ใช้แม่แบบ /% g /% ยู".

บทช่วยสอนโดย Digital Ocean

ความรู้เบื้องต้นเกี่ยวกับกลุ่มควบคุม


0

คุณอาจลองตั้งค่า /etc/security/limits.conf ที่นั่นคุณควรจะสามารถปรับเวลาซีพียูและหน่วยความจำที่ผู้ใช้สามารถบริโภคได้ สำหรับรายละเอียดดูhttps://linux.die.net/man/5/limits.conf

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.