[Linuxメモ]Osukini Server LTのメモリ節約

TS3Y0043
その後のOsukini Server LTですが、前より幾分マシなもののやっぱり固まる時は固まるので、更に対処してみた。

最初にやったこと。

さくらのシャチョさんのブログをみて不必要なプロセスを全て停止した。

CentOSをサーバーとして活用するための基本的な設定 – さくらインターネット創業日記

また、コンソールの数も1個にしたが、CentOS5の方法は使えないので
/etc/sysconfig/initを以下のように編集してサーバーを再起動して対応した。

ttyのところはtty1でいいが、増やす時の書き方がわからなくなると嫌なので[1-1]と変更したが、よく考えてみれば、元の行をコピーしてコメントアウトしておけばよかった。

変更前

ACTIVE_CONSOLES=/dev/tty[1-6]

変更後

ACTIVE_CONSOLES=/dev/tty[1-1]

 

CentOS6 仮想コンソール「mingetty」の数を調整するの巻 – TrippyBoyの愉快な日々

Fedora 14:「mingetty」仮想コンソール数を変更する

これだけやって、数日様子をみた。まあ、前よりは良かった。

が、今日の夜中にブログを更新したらまた固まった。写真多めだったからだろうか?

/var/log/messagesを眺めてみると、kernelがOut of memoryしていた。

Nov 14 03:49:26 rad-xen-vwebxx kernel: Out of memory: Kill process 12854 (httpd) score 11 or sacrifice child
Nov 14 03:49:26 rad-xen-vwebxx kernel: Killed process 12854, UID 48, (httpd) total-vm:46320kB, anon-rss:1940kB, file-rss:24kB
Nov 14 03:49:26 rad-xen-vwebxx kernel: mt-kiss-mint.cg invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Nov 14 03:49:26 rad-xen-vwebxx kernel: mt-kiss-mint.cg cpuset=/ mems_allowed=0
Nov 14 03:49:26 rad-xen-vwebxx kernel: Pid: 26428, comm: mt-kiss-mint.cg Not tainted 2.6.32-279.14.1.el6.i686 #1

やっぱりメモリーが足りないんだなーということを痛感する。

AMA-TOOLBOXのサーバーと違って、こっちはMySQLとWebminが入っているし、ついでに入れてしまったEC-CUBEまで入っている。MTでメール通知が出来るようにPostfixまで動かしている。メモリーが足りなくなるのもしかたがない気もするが、本格的にメモリーの節約をしようと考える。10年前の感覚だと512MBメモリーがあればそれなりに動きそうな気もするが、OSや各アプリケーションも時代とともにメモリー食いになったということか。


とりあえず、ps auxwでメモリー喰いなプロセスを探してみる。下記は抜粋であるが、apache以外でメモリーを食っているのはやっぱりmysql、とりあえず止める訳にはいかないので、他を見るとvsftpdはそうでもないので放置、postfixもそれほどでもない。Webminのプロセスであるminiserv.plがなにげにメモリーを食っている。メモリー上に13Mほど載っかっている。めったに使わないので止めることにする。使う時だけ立ち上げればいいだろう。

mysql     1051  0.0  2.9 135852 15228 ?        Sl   04:07   0:00 /usr/libexec/mysqld –basedir=/usr –datadir=/var/lib/mysql –user=mysql –log-error=/v
root      1176  0.0  0.4  12504  2504 ?        Ss   04:07   0:00 /usr/libexec/postfix/master
root      1288  0.0  2.5  19604 13008 ?        Ss   04:08   0:00 /usr/bin/perl /usr/libexec/webmin/miniserv.pl /etc/webmin/miniserv.conf
root       920  0.0  0.1   6804   636 ?        Ss   04:07   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

下記のようにしてWebminを停止した。

#service webmin stop
#chkconfig webmin off

webminのインストール(参考)


EC-CUBEを停止した。SaaSesのサポートページを見ると以下の方法でアンインストールできる。とりあえず、2の手順を参考にしてeccube.confの中身をコメントアウトして動かなくした。が、これはメモリーの節約には関係ないと思われる。

1. /opt/eccube, /opt/eccube-2.4.3 を削除
2./etc/httpd/conf.d/eccube.conf を削除
3. mysql で以下の操作を行う
・データベース「eccube_db」の削除
・ユーザ「eccube_db_user」の削除
4.httpd を再起動する

SaaSesサポートセンター » EC-Cubeのアンインストール


これだけやってみたがメモリーほとんど増えない。常にusedが400MB後半になっていて、ほとんどメモリーに空きがない。

やはり最大の敵はapacheだろうということで、apacheの設定を弄ることにする。とりあえずどれくらいメモリー食ってるのか調べてみる。かなりいってますね。プロセス数などを制限しないとダメっぽい。

# ps aux|grep httpd
root      1719  0.0  1.0  31712  5292 ?        Ss   04:40   0:00 /usr/sbin/httpd
apache    1724  0.1  3.7  45816 19260 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1725  0.1  3.7  45832 19284 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1726  0.9  3.9  45816 20068 ?        S    04:40   0:06 /usr/sbin/httpd
apache    1727  0.9  3.9  46848 19924 ?        S    04:40   0:05 /usr/sbin/httpd
apache    1728  0.2  3.8  45816 19812 ?        S    04:40   0:01 /usr/sbin/httpd
apache    1730  0.3  3.8  45816 19852 ?        S    04:40   0:01 /usr/sbin/httpd
apache    1744  0.2  3.8  45816 19608 ?        S    04:41   0:01 /usr/sbin/httpd
apache    1753  0.7  3.9  45816 20104 ?        S    04:44   0:03 /usr/sbin/httpd
apache    1754  0.3  3.9  45844 20108 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1755  0.4  3.0  41740 15708 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1757  0.4  3.1  41720 15896 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1758  0.0  0.7  31876  3772 ?        S    04:44   0:00 /usr/sbin/httpd
apache    1759  0.3  2.9  41740 14872 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1760  0.4  3.1  42764 16012 ?        S    04:44   0:02 /usr/sbin/httpd
apache    1763  0.0  0.7  31876  3772 ?        S    04:44   0:00 /usr/sbin/httpd
apache    1764  0.1  2.8  39708 14512 ?        S    04:44   0:00 /usr/sbin/httpd
apache    1772  0.4  3.0  41736 15724 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1773  0.2  3.1  41740 15820 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1774  0.2  3.0  41748 15724 ?        S    04:44   0:01 /usr/sbin/httpd
apache    1775  0.1  2.8  39716 14448 ?        S    04:44   0:00 /usr/sbin/httpd

 

apacheのカスタマイズなんて久しぶりなので、色々探してたどり着いたブログ達を参考に色々やってみた。

/etc/httpd/conf/httpd.confを編集して、使わないロードモジュールを無効にした。最初から無効になっているもの以外で下記が新たに無効にした部分。

#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.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

また、apacheの起動プロセス数や子プロセスの再生成タイミングなども縮小方向で変更した。これでだいぶメモリーが節約できることが期待できる。

変更前

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

変更後

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit      50
MaxClients       50
MaxRequestsPerChild  300
</IfModule>

 

変更前

# ps axuw|grep httpd
root      1719  0.6  1.5  31712  8152 ?        Ss   04:40   0:00 /usr/sbin/httpd
apache    1723  4.0  2.0  34936 10580 ?        D    04:40   0:00 /usr/sbin/httpd
apache    1724  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1725  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1726  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1727  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1728  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1729  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
apache    1730  0.0  0.8  31712  4096 ?        S    04:40   0:00 /usr/sbin/httpd
root      1732  0.0  0.1   4372   740 pts/1    S+   04:40   0:00 grep httpd
#

変更後

# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
# !ps
ps auxw|grep httpd
root      3192  0.3  1.5  30992  7664 ?        Ss   07:32   0:00 /usr/sbin/httpd
apache    3194  0.0  0.7  30992  3832 ?        S    07:32   0:00 /usr/sbin/httpd
apache    3195  0.0  0.7  30992  3832 ?        S    07:32   0:00 /usr/sbin/httpd
apache    3196  0.0  0.7  30992  3832 ?        S    07:32   0:00 /usr/sbin/httpd
apache    3197  0.0  0.7  30992  3832 ?        S    07:32   0:00 /usr/sbin/httpd
apache    3198  0.0  0.7  30992  3832 ?        S    07:32   0:00 /usr/sbin/httpd
root      3200  0.0  0.1   4372   736 pts/1    S+   07:32   0:00 grep httpd
# !ps

 

結果、常に400MB後半だった使用メモリーが300MB後半から400MB前半で、推移している。

Mem:    509668k total,   399100k used,   110568k free,    10360k buffers

 

ab -n 300 -c 30 http://blog.kumacchi.com/

Benchmarking blog.kumacchi.com (be patient)
apr_poll: The timeout specified has expired (70007)
Total of 30 requests completed

abコマンドでベンチマークしてみると同時接続数30では上記のようにtimeoutしてしまうものの、サーバーは固まらなくなった。同時接続数20なら普通に処理されるようになった。

httpdの消費メモリ節約 | 徒労日記

【Apache】モジュールの削除によりメモリを節約する – (・∀・)イイ!!Memo

とりあえず、これで様子をみてみてこれでもダメだと、webサーバー自体を軽量なものに変更しようかと考えている。

あと、更に調べている時にさくらインターネットん田中社長のブログにロードモジュールの一覧と説明が載っているのを見つけたのでこれを参考にして、さらにロードモジュールを絞ればもうちょっとメモリーが節約出そうに思う。

さくらインターネット創業日記: 格安VPSアーカイブ


●追記

田中社長のブログのロードモジュールの説明を参考にして、最終的にhttpd.confは下記の様になった。

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

結果起動直後のhttpdのメモリー使用量はここまで減少した。

[root@rad-xen-vweb10 conf]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@rad-xen-vweb10 conf]# ps auxw|grep httpd
root      3632  0.1  1.4  29808  7156 ?        Ss   08:20   0:00 /usr/sbin/httpd
apache    3634  0.0  0.9  29836  4936 ?        S    08:20   0:00 /usr/sbin/httpd
apache    3635  7.1  2.9  37720 14984 ?        S    08:20   0:00 /usr/sbin/httpd
apache    3636  0.0  0.6  29808  3472 ?        S    08:20   0:00 /usr/sbin/httpd
apache    3637  0.0  0.6  29808  3472 ?        S    08:20   0:00 /usr/sbin/httpd
apache    3638  0.0  0.6  29808  3472 ?        S    08:20   0:00 /usr/sbin/httpd
apache    3639  0.0  0.6  29808  3472 ?        S    08:20   0:00 /usr/sbin/httpd
root      3641  0.0  0.1   4372   736 pts/1    S+   08:21   0:00 grep httpd
[root@rad-xen-vweb10 conf]#

これだけロードモジュールを削るとちょっと心配であるが、とりあえずサイトにはアクセスできているので、これでしばらく様子を見てみる。

注意点としてこれだけ削ると、httpd.confの定義がエラーになってサーバーを起動できなくななる恐れがある。というかなったので注意が必要。

たぶんautoindex_moduleを削った影響だと思われるが、AddIcon系の定義がエラーになってapacheを起動できなくなった。エラーの行を全てコメントアウトして対応した。

httpd.confの編集前にコピーをとっておくことを推奨。

タグ : , , ,