ºìÁªLinuxÃÅ»§
Linux°ïÖú

linuxÖÐÏÞÖÆÓû§½ø³ÌCPUºÍÄÚ´æÕ¼ÓÃÂÊ

·¢²¼Ê±¼ä:2008-03-07 00:40:50À´Ô´:ºìÁª×÷Õß:xgbmhc
×÷Õߣº¿µ¿µ

Ç°¼¸ÌìÔÚÍøÒײ©¿ÍÉÏ·¢ÁËһƪ¡°linuxÖÐÏÞÖÆÓû§½ø³ÌCPUÕ¼ÓÃÂÊ¡±µÄÎÄÕ£¬Ì¸µ½ÏÞÖƽø³ÌCPUÕ¼ÓÃÂʵÄÎÊÌ⣬¸ø³öÁËÒ»¸öshell½Å±¾´úÂëÈçÏ£º

renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`

ÆäÖÐÓõ½ps»ñÈ¡½ø³ÌÐÅÏ¢£¬ÆäʵpsÖÐ%CPUÒ»ÁеÄÒâÒåÊǽø³Ìʵ¼ÊÕ¼ÓÐCPUʱ¼äºÍËü´æ»îʱ¼äµÄ±ÈÖµ£¬Õâ¸öÖµÄÜ·´Ó¦½ø³Ì¶ÔCPUµÄÏûºÄ£¬µ«²»ÄÜ׼ȷ·´Ó¦½ø³ÌËùÕ¼CPUʱ¼äÕ¼Õû¸öϵͳCPUµÄ°Ù·Ö±È¡£¶øtopÊä³öÖеÄ%CPUÕâÒ»ÁÐÕýÊǽø³ÌËùÕ¼CPUʱ¼äÕ¼Õû¸öϵͳCPUµÄ°Ù·Ö±È£¬ÓÃÓÚÏÞÖƽø³ÌCPUÕ¼ÓÃÂʸü¼ÓºÏÀí£¬Í¬Ê±%MEMÒ»Áл¹·´Ó¦Á˽ø³ÌÕ¼ÓÃÄÚ´æµÄ°Ù·Ö±È£¬¿ÉÒÔÓÃÓÚÏÞÖƽø³ÌÄÚ´æÕ¼ÓÃÂÊ¡£shell½Å±¾´úÂëÈçÏ£º

#!/bin/sh

PIDS=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}'`

for PID in $PIDS
do
renice +10 $PID
echo "renice +10 $PID"
done

¿ÉÒÔ½«Õâ¸ö½Å±¾·Åµ½cronÖÐÔËÐУ¬±ÈÈçÿ·ÖÖÓ¼ì²éÒ»´Î£¬Ö»ÐèÒÔrootÉí·ÝÌí¼ÓcrontabÏ

#crontab -e
* * * * * limit.sh

ÒÔºóÿ¸öÒ»·ÖÖӾͻá¼ì²éÒ»´Î£¬µ÷ÕûÕ¼ÓÃ50%ÒÔÉÏCPU»ò25%ÄÚ´æµÄ½ø³ÌµÄniceÖµ£¬´Ó¶øʹÕâÑùµÄ½ø³ÌÓÅÏȼ¶±äµÍ£¬±»µ÷¶ÈµÄ»ú»á¼õÉÙ£¬Í¬Ê±»áÏòroot·¢ÓʼþÌáʾ¸Ã½ø³Ì±»µ÷Õû¹ý¡£

²»¹ý£¬ÏÞÖÆÄÚ´æʹÓÃ×îºÃ»¹ÊÇÓÃPAM£¬RedHat¿ÉÒÔÔÚ/etc/security/limits.confÖÐÉèÖá£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ