さくらのVPSで動いているApacheの不要モジュールを削除する

このブログはさくらのVPSで動いています。
それ以外にもCakePHPのアプリケーションがいくつか動いている状態です。

Apacheの不要モジュールを使わないようにするとメモリ消費が抑えられて良い事づくし。
さくらのクラウドがまともに使えるようになった時も、このテクニックが使えるはず!ということで、Apacheの不要モジュールを削除してみました。

不要なモジュールをロードしないようにコメントアウトする

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_default_module modules/mod_authz_default.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
#LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule logio_module modules/mod_logio.so
#LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
#LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
#LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule suexec_module modules/mod_suexec.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so

ロードしないようにしたモジュールを使った設定をコメントアウト

#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

#
# AddIcon* directives tell the server which icon to show for different
# files or filename extensions.  These are only displayed for
# FancyIndexed directories.
#
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*

#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core

#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon is which icon to show for files which do not have an icon
# explicitly set.
#
#DefaultIcon /icons/unknown.gif

#
# AddDescription allows you to place a short description after a file in
# server-generated indexes.  These are only displayed for FancyIndexed
# directories.
# Format: AddDescription "description" filename
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

#
# ReadmeName is the name of the README file the server will look for by
# default, and append to directory listings.
#
# HeaderName is the name of a file which should be prepended to
# directory indexes.
#ReadmeName README.html
#HeaderName HEADER.html

#
# IndexIgnore is a set of filenames which directory indexing should ignore
# and not include in the listing.  Shell-style wildcarding is permitted.
#
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

ダイジェスト認証を設定したら…

couldn’t check access. No groups file?

と出て500エラーが出たので、mod_authz_userを有効にしました。

ベーシック認証でも同じエラーが出ると思うので、ベーシック認証かダイジェスト認証を設定するなら、mod_authz_userは必須だと思います。

WordPressにWP Super Cacheをインストールしているなら…

mod_expires – supercached ページで有効期限を設定してください。このモジュールがないと、読者は再読込みしたりコメントを残しても新しいページを参照できないかもしれません。

というメッセージが表示されます。mod_expiresが必要だそうです。

まとめ

ということで最終的に読み込むモジュールは以下のような感じになりました。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule version_module modules/mod_version.so

うん。すっきり。

psで見てみると

モジュールを消す前

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     22998  0.1  0.3 411840 12332 ?        Ss   12:17   0:00 /usr/sbin/httpd
apache   23016  0.8  1.2 426872 50576 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23017  0.0  0.1 411980  7668 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23018  0.0  0.1 411980  7668 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23019  0.0  0.1 411980  7668 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23020  0.2  0.6 415348 25184 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23021  0.0  0.1 411980  7752 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23022  0.0  0.1 411980  7668 ?        S    12:17   0:00 /usr/sbin/httpd
apache   23023  0.0  0.1 411980  7668 ?        S    12:17   0:00 /usr/sbin/httpd

モジュールを消した後

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     23103  1.2  0.2 332072 11200 ?        Ss   12:21   0:00 /usr/sbin/httpd
apache   23121  0.0  0.1 332072  5632 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23122  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23123  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23124  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23125  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23126  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23127  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd
apache   23128  0.0  0.1 332072  5628 ?        S    12:21   0:00 /usr/sbin/httpd

不要モジュールを消す前と比べるとVSZが80MB程度下がりました!

mod_phpを削除したら…

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     23473  3.3  0.1 104200  4516 ?        Ss   12:43   0:00 /usr/sbin/httpd
apache   23490  0.0  0.0 104200  2700 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23491  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23492  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23493  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23494  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23495  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23496  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd
apache   23497  0.0  0.0 104200  2696 ?        S    12:43   0:00 /usr/sbin/httpd

mod_phpが一番メモリを食ってそうですね…

参考サイト

http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html
http://d.hatena.ne.jp/shimooka/20070911/1189440451
http://hoge001.exblog.jp/14020546/

2012/05/08追記:[error] an unknown filter was not added: DEFLATEが大量発生

久々にエラーログを覗いてみたら

[error] an unknown filter was not added: DEFLATE

が大量に発生しておりました。

#LoadModule deflate_module modules/mod_deflate.so

で、mod_deflateの読み込んでいなかった為に発生していたようです…
mod_deflateは、GZIP圧縮をかけるのに使ってます。

コメントアウトを外して、再起動し、エラーが出なくなりました。

まとめると以下のような感じ。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule version_module modules/mod_version.so

“さくらのVPSで動いているApacheの不要モジュールを削除する” への2件のフィードバック

  1. […] さくらのVPSで動いているApacheの不要モジュールを削除する | Webエンジニアライフ: さくらのVPSで動いているApacheの不要モジュールを削除する | Webエンジニアライフ […]

  2. […] さくらのVPSで動いているApacheの不要モジュールを削除する | Webエンジニアライフ […]