Apacheチューニング:プロセス設定を変更

2011年3月4日 20:00

 hylom.netがだいぶ遅くなっていたのでちょっとチューニングした。原因としてはメモリ不足、DBが遅い、I/Oが遅い、ネットワークが遅いなどがあるが、さくらVPSのコントロールパネルを見た限りではCPUやネットワーク、I/Oには余裕がある感じだったので、メモリ不足ではないかと検討をつける。ということで、各プロセスのメモリ使用状況をチェック。

# ps aux --sort -rss| lv

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
apache   28879  0.1  6.6 269404 33728 ?        S    Mar01   9:40 /usr/sbin/httpd
apache   28966  0.1  6.5 269072 33484 ?        S    Mar01   9:54 /usr/sbin/httpd
apache   30532  0.1  6.5 272696 33412 ?        S    Mar02   4:48 /usr/sbin/httpd
apache   30542  0.1  6.2 274072 31680 ?        S    Mar02   4:41 /usr/sbin/httpd
apache   29002  0.1  6.0 274684 30804 ?        S    Mar01   9:31 /usr/sbin/httpd
apache   28868  0.2  5.9 273812 30556 ?        S    Mar01  10:30 /usr/sbin/httpd
apache   28750  0.2  5.8 274168 29964 ?        S    Mar01  10:56 /usr/sbin/httpd
apache   30543  0.1  5.7 274040 29212 ?        S    Mar02   4:23 /usr/sbin/httpd
apache   30529  0.1  5.2 273992 26952 ?        S    Mar02   4:33 /usr/sbin/httpd
apache   28580  0.2  4.8 274152 24852 ?        S    Mar01  10:36 /usr/sbin/httpd
apache   27032  0.1  4.3 273148 22224 ?        S    Mar01   6:06 /usr/sbin/httpd
apache    8773  0.1  3.9 268900 19944 ?        S    Mar03   2:44 /usr/sbin/httpd
apache   27108  0.1  3.7 274016 19224 ?        S    Mar01   6:03 /usr/sbin/httpd
apache   30530  0.1  3.3 273152 17020 ?        S    Mar02   4:45 /usr/sbin/httpd
apache   18789  0.1  2.7 269340 14000 ?        S    Mar01   5:38 /usr/sbin/httpd
apache   28998  0.1  2.6 274204 13616 ?        S    Mar01   9:11 /usr/sbin/httpd
apache    8767  0.1  2.1 273544 10756 ?        S    Mar03   2:53 /usr/sbin/httpd
apache   28976  0.1  1.9 273572  9740 ?        S    Mar01   9:32 /usr/sbin/httpd
apache   28877  0.2  1.4 274668  7308 ?        S    Mar01  10:14 /usr/sbin/httpd
apache   30506  0.1  1.1 273528  5688 ?        S    Mar02   4:12 /usr/sbin/httpd
 :
 :

 見て分かるように、httpdのプロセスが多数走っており、メモリを食いつぶしていることが分かる。そこで、httpdで使用するプロセス数を調整することで対処を図る。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
# MaxSpareServers   20
MaxSpareServers   16
#ServerLimit      256
ServerLimit      32
#MaxClients       256
MaxClients       32
MaxRequestsPerChild  4000
</IfModule>

 MaxSpareServersとMaxClientsを減らしてとりあえず様子見。

 なお、@ITの「httpd.confによるWebサーバの最適化」という記事などを参考にした。

コンテンツのロードを高速化するHTML5の「link prefetching」機能

2010年6月3日 12:42

 keyboardyによると、HTML5にはlink prefetching機能があり、指定したコンテンツをあらかじめfetchしておく機能があるそうだ。

 fetchするコンテンツはLINKタグで指定する。たとえば、次のようなLINK要素をHTML内に記述しておくと、ロード時に「page2.html」がfetchされる。

<link rel="next" href="page2.html">

 また、次のように明示的にprefetchを指定することもできる。

<link rel="prefetch" href="/img/img.jpg">

 この機能はすでにFirefoxでは実装済みで、OperaやChrome、Safariでもすぐにサポートされるのでは、とのこと。Internet Explorerでは2020年代まで利用できないかも;-) だそうだ。

 ちなみにMozillaのlink prefetchingに関するドキュメントによると、HTTPヘッダーでも次のようにしてprefetchするコンテンツを指定できる。

Link: </images/big.jpeg>; rel=prefetch

 さらに、METAタグでも指定できる。

<meta http-equiv="Link" content="</images/big.jpeg>; rel=prefetch">

 また、 Firefoxの場合、http://で始まるURLのみに対応し、https://はセキュリティ関連の理由のためprefetchされない。また、FTPなどもprefetch対象外。prefetchはブラウザがidle状態で、たとえばコンテンツのローディングやダウンロードが行われている間は行われないそうだ。あとはユーザー設定でFirefoxのprefetchを無効にできるとか、prefetchリクエストは「X-moz: prefetch」ヘッダー付きで送信されるとか色々あるが、その辺は上記のドキュメントを参照。