<?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>delab &#187; apache</title>
	<atom:link href="http://de-lab.com/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://de-lab.com</link>
	<description>xhtml CSS SEO CMS PHP など Webデザイン WEBサイト構築の話題</description>
	<lastBuildDate>Wed, 05 Oct 2011 23:41:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[Slicehost] Ubuntuサーバーの高速化1 &#8211; Apacheチューニング</title>
		<link>http://de-lab.com/article/stable-apache-tuning/</link>
		<comments>http://de-lab.com/article/stable-apache-tuning/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 08:31:18 +0000</pubDate>
		<dc:creator>sato</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Slicehost]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://de-lab.com/?p=195</guid>
		<description><![CDATA[少ないメモリ(258ｍ)でも安定動作・高速動作するためにApacheの設定を見直しました。 Slicehostでの運用もしばらく経ちましたが、最初は頻繁にapacheが停止したりCPU値が100％超えてOOMキラーが発生 [...]]]></description>
			<content:encoded><![CDATA[<div class="disc">
<p>少ないメモリ(258ｍ)でも安定動作・高速動作するためにApacheの設定を見直しました。</p>
</div>
<p><span id="more-195"></span></p>
<p>Slicehostでの運用もしばらく経ちましたが、最初は頻繁にapacheが停止したりCPU値が100％超えてOOMキラーが発生したりしましたが、高速化、コストパフォーマンスを考えて設定を見直ししました。驚くほど動作が安定しています。</p>
<p>Rubyのインスタンスは正直まだ実運用は難しいレベルですが、需要があったとき考えます:-p</p>
<h2 id="toc-apache">Apacheのチューニング</h2>
<h3 id="toc-">参考リンク</h3>
<p class="p_link"><a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03b.html" title="＠IT：httpd.confによるWebサーバの最適化（2/3）" target="_blank" class="liexternal">＠IT：httpd.confによるWebサーバの最適化（2/3）</a></p>
<h3 id="toc-apache1">Apacheの設定を見直す</h3>
<pre name="c" class="php">/etc/apache2/apache2.conf</pre>
<h4 id="toc-keepalive-on">KeepAlive On</h4>
<p>KeepAliveを利用して1つの接続を使い回し、複数のリクエストに応えられるようにします。</p>
<h4 id="toc-maxkeepaliverequests-100">MaxKeepAliveRequests 100</h4>
<p>1つのKeepAliveが、開始から切断までに受け付けるリクエスト数を設定。推奨：1ページ当たりの平均的なファイル数＋αを数値とする。</p>
<h4 id="toc-keepalivetimeout-15">KeepAliveTimeout 15</h4>
<p>KeepAliveで接続が維持されつづけると、効率が落ちるので一定時間で切断するための時間設定。</p>
<p>リソースの確保のため、小さい数値にする。</p>
<h4 id="toc-timeout-45">Timeout 45</h4>
<p>処理タイムアウト時間。 若干短くしている。</p>
<h2 id="toc-prefork-mpm-">prefork MPM の設定</h2>
<p>Apache 2.0はマルチスレッドに対応し、1.0のプロセス処理からパフォーマンスを向上しましたが、PHPではマルチスレッドプロセスの<strong>worker MPM</strong>を使うことは推奨されていません(デフォルトもprefork)。</p>
<h3 id="toc-1">デフォルト設定</h3>
<pre name="code" class="sql">&lt;IfModule mpm_prefork_module&gt;
　MinSpareServers 10
　MaxSpareServers 10
　StartServers 10
　MaxClients 50
　MaxRequestsPerChild 50
&lt;/IfModule&gt;</pre>
<h3 id="toc-startservers">StartServers</h3>
<p>Apache起動時のサーバプロセスの数。MinSpareServers と同一の値を設定する。</p>
<h3 id="toc-maxspareservers">MaxSpareServers</h3>
<p>待機させておくhttpdの最大数。Apacheは定期的に監視してこの値を上回っていた場合は自動的にhttpdを停止する。</p>
<h3 id="toc-maxclients"> MaxClients</h3>
<p> MaxClients * Apacheの1プロセスが使用するメモリ < 使用可能なメモリ</p>
<p>使用可能なメモリを計算するのは複雑なので、OSメモリの90％位を目安にしてます。</p>
<h4 id="toc-2">プロセスの消費メモリを計算</h4>
<pre name="code" class="php">TOP</pre>
<p>Mでメモリ使用順に並べ替え</p>
<h4 id="toc-top">topで上位からの一部分</h4>
<p>
  PID      USER       PR  NI   VIRT  RES  SHR  S  CPU MEM   TIME  COMMAND<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
 8131 www-data  15   0  269m  36m  23m S    0 14.4   0:00.69 apache2<br />
 8134 www-data  15   0  269m  27m  14m S    0 10.7   0:01.13 apache2<br />
 8136 www-data  15   0  269m  27m  14m S    0 10.7   0:01.14 apache2 <br />
 8128 www-data  15   0  269m  27m  14m S    0 10.6   0:01.31 apache2<br />
 8127 www-data  15   0  269m  27m  14m S    0 10.6   0:00.80 apache2<br />
 8142 www-data  15   0  269m  27m  14m S    0 10.6   0:00.42 apache2<br />
 8144 www-data  15   0  269m  27m  13m S    0 10.6   0:00.73 apache2<br />
 8140 www-data  15   0  269m  26m  13m S    0 10.5   0:00.43 apache2<br />
 8138 www-data  15   0  269m  25m  12m S    0 10.1   0:00.43 apache2<br />
 8146 www-data  15   0  269m  25m  12m S    0 10.0   0:00.21 apache2</p>
<h4 id="toc-3">平均化したプロセス使用メモリを求める</h4>
<p>RES(物理メモリ) &#8211; SHR(共有メモリ)で一つのプロセスが使用するメモリを求める</p>
<p>プロセス使用メモリ(15m) / Apacheプロセス数 = 平均プロセス使用メモリ</p>
<p>平均的に10ｍ～15ｍ位になるんじゃないかと思います。</p>
<h4 id="toc-maxclients1">MaxClientsの値</h4>
<p>{物理メモリ(258m)*0.9}(232m) ÷ 平均プロセス使用メモリ(15m) ≒ MaxClients (15)</p>
<p>なるべく高い数値にすればクライアントの要求に応えられますが、高い値にし過ぎると、メモリを使い切りスワップが発生します。</p>
<h3 id="toc-maxrequestsperchild">MaxRequestsPerChild</h3>
<p>ここで指定した数のリクエストを処理すると再起動します。Apache側で使い回しているプロセスを定期的に再起動させることで、メモリリークを防ぐことができます。</p>
<p>なるべく大きい数を指定します。0だと再起動しません。</p>
<h3 id="toc-mpm">修正したMPMの設定</h3>
<pre name="code" class="sql">&lt;IfModule mpm_prefork_module&gt;
    StartServers          3
    MinSpareServers       3
    MaxSpareServers      13
    MaxClients           15
    MaxRequestsPerChild  4000
&lt;/IfModule&gt;
</pre>
<img src="http://de-lab.com/?ak_action=api_record_view&id=195&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://de-lab.com/article/stable-apache-tuning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

