<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Herbert Yang &#187; Load</title>
	<atom:link href="http://www.herbertyang.com/tag/load/feed" rel="self" type="application/rss+xml" />
	<link>http://www.herbertyang.com</link>
	<description></description>
	<lastBuildDate>Thu, 09 Sep 2010 14:41:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>当负载过高时重启Apache</title>
		<link>http://www.herbertyang.com/2009/11/23/when-the-load-is-too-high-to-restart-apache.html</link>
		<comments>http://www.herbertyang.com/2009/11/23/when-the-load-is-too-high-to-restart-apache.html#comments</comments>
		<pubDate>Mon, 23 Nov 2009 05:30:27 +0000</pubDate>
		<dc:creator>Herbert</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Load]]></category>

		<guid isPermaLink="false">http://www.herbertyang.com/?p=452</guid>
		<description><![CDATA[最近半年碰到了几次，由于“蜘蛛”导致机器挂掉了，所以想出了这个方法，等系统负载过高的情况下，直接重启Apache。这就是Twitter提倡的那样，等进程杀死你之前，你先杀死他（原话不记得了）。其实这种方法早就在业界使用了。 来吧，看看我写的脚本。 checkload.sh #!/bin/sh TOP_SYS_LOAD_NUM=5 SYS_LOAD_NUM=`uptime &#124; awk '{print $(NF-2)}' &#124; sed 's/,//'` echo $(date +&#34;%y-%m-%d&#34;) `uptime` if [ `echo &#34;$TOP_SYS_LOAD_NUM &#60; $SYS_LOAD_NUM&#34;&#124;bc` -eq 1 ] then echo &#34;##&#34; $(date +&#34;%y-%m-%d %H:%M:%S&#34;) &#34;pkill httpd&#34; `ps -ef &#124; grep httpd &#124; wc -l` pkill httpd sleep 10 for i in 1 2 3 do if []]></description>
			<content:encoded><![CDATA[<p>最近半年碰到了几次，由于“蜘蛛”导致机器挂掉了，所以想出了这个方法，等系统负载过高的情况下，直接重启Apache。这就是Twitter提倡的那样，等进程杀死你之前，你先杀死他<em>（原话不记得了）</em>。其实这种方法早就在业界使用了。<br />
来吧，看看我写的脚本。<br />
<strong>checkload.sh</strong></p>
<pre class="brush: bash;">
#!/bin/sh
TOP_SYS_LOAD_NUM=5
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`

echo $(date +&quot;%y-%m-%d&quot;) `uptime`
if [ `echo &quot;$TOP_SYS_LOAD_NUM &lt; $SYS_LOAD_NUM&quot;|bc` -eq 1 ]
then
    echo &quot;##&quot; $(date +&quot;%y-%m-%d %H:%M:%S&quot;) &quot;pkill httpd&quot; `ps -ef | grep httpd | wc -l`
    pkill httpd
	sleep 10
	for i in 1 2 3
    do
		if [ `pgrep httpd | wc -l` -le 0 ]
		then
			/home/app/httpd/bin/apachectl start
			sleep 30
			echo &quot;##&quot; $(date +&quot;%y-%m-%d %H:%M:%S&quot;) &quot;start httpd&quot; `ps -ef | grep httpd | wc -l`
		fi
	done
else
	if [ `pgrep httpd | wc -l` -le 0 ]
	then
		/home/app/httpd/bin/apachectl start
		sleep 30
		echo &quot;##&quot; $(date +&quot;%y-%m-%d %H:%M:%S&quot;) &quot;start httpd&quot; `ps -ef | grep httpd | wc -l`
	fi
fi
</pre>
<p>然后在crontab里增加定时执行的命令</p>
<pre class="brush: bash;">*/2 * * * * (/root/checkload.sh &gt;&gt;/root/checkload.log)</pre>
<p>每两分钟检查一次系统负载。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herbertyang.com/2009/11/23/when-the-load-is-too-high-to-restart-apache.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
