◆ クイックインデックス ◆
・「鷹の巣」の自宅サーバー 掲示板 No.7748 から来られた方、キーワード "サブシテムがロック" で来られた方は ロックファイルの削除 へ
# grep 'Memory' /var/log/messages
Nov 5 00:57:02 server kernel: Out of Memory: Killed process 28634 (httpd).
Nov 5 01:09:15 server kernel: Out of Memory: Killed process 29346 (httpd).
Nov 5 01:25:24 server kernel: Out of Memory: Killed process 29356 (httpd).
Nov 5 01:37:37 server kernel: Out of Memory: Killed process 29357 (httpd).
Nov 5 09:08:51 server kernel: Out of Memory: Killed process 29958 (httpd).
Nov 5 09:21:33 server kernel: Out of Memory: Killed process 29975 (httpd).
Nov 5 21:33:33 server kernel: Out of Memory: Killed process 30295 (httpd).
Nov 5 21:34:26 server kernel: Out of Memory: Killed process 30277 (httpd).
Nov 6 09:40:11 server kernel: Out of Memory: Killed process 921 (httpd).
Nov 6 09:41:06 server kernel: Out of Memory: Killed process 922 (httpd).
Nov 6 10:43:04 server kernel: Out of Memory: Killed process 1202 (httpd).
Nov 6 15:37:56 server kernel: Out of Memory: Killed process 1346 (httpd).
やはりそのようだね。 数ヶ月前に M/B や ハードディスクの交換をしたわけなのだが、その時に物理メモリもスワップ領域も小さくなったのだが、普段はメモリ不足が起きることはない。でも、数百メガもあるファイルを扱う DAV はどうしてもメモリをたくさん食らうらしい。これに対処するためにスワップを増やすことに。しかし、ハードディスクは容量一杯確保してあるのでスワップパーテーションの容量を増やすことは難しい。そこで、一般パーテーション(?)上にスワップファイルを作ることに。
まず /var/tmp/ に swapfile という名前で 200M のファイルを作成する。作成する場所やファイル名は好きなもので OK。そして、このファイル上にスワップ領域を作成し、スワップ領域を有効にする。free でちゃんとスワップが増えているかも確認しておこう。
# dd if=/dev/zero of=/var/tmp/swapfile bs=1024 count=200000 読み込んだブロック数は 200000+0 書き込んだブロック数は 200000+0 # /sbin/mkswap -v1 /var/tmp/swapfile Setting up swapspace version 1, size = 199996 KiB # /sbin/swapon /var/tmp/swapfile # free total used free shared buffers cached Mem: 127020 123940 3080 0 1948 89316 -/+ buffers/cache: 32676 94344 Swap: 288340 22004 266336
# rpm --test -Uvh samba-2.2.4.ja-12.i686.rpm
エラー: 依存性の欠如:
libreadline.so.4 は samba-2.2.4.ja-12 に必要とされています
# rpm --rebuild samba-2.2.4.ja-12.src.rpm # バイナリrpm リビルド
# sudo /sbin/service smb stop # smb を停止
# sudo rpm -Uvh RPMS/i386/samba-2.2.4.ja-12.i386.rpm # リビルドした rpm でアップデート
# sudo /sbin/service smb start # smb を再開
○ まだ Apache が落ちる
その後順調に経過してたいたけどまだうまく再起動しない場合がある。きちんと原因究明が出来るまではとりあえずサービスが止まったままにはならないようにしておくことに。ログローテーションされた後に一度再起動させれば上手く起動していた場合は再起動するだけだし、上手く起動できていなかった場合も起動できるかもしれない。crontab に追加して保存すればOK。
$ crontab -e 3 4 * * * /sbin/service httpd restart # 毎日 4時 3分に httpd を再起動
## /var/log/httpd/error_log ##
…(中略)…
[Wed Sep 4 04:02:02 2002] [notice] SIGHUP received. Attempting to restart
$ /usr/sbin/apachectl configtest
Syntax OK
$ /usr/sbin/httpd
Syntax error on line 1259 of /etc/httpd/conf/httpd.conf:
Invalid command 'DAVLockDB', perhaps mis-spelled or defined by a module not included
in the server configuration
$ /usr/sbin/httpd -DHAVE_DAV $ ps ax | grep httpd # エラーが出ないのでプロセス状態を確認 2985 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV 2986 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV 2987 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV 2990 pts/1 S 0:00 grep httpd
$ /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
セグメンテーション違反です (core dumped)
$ rpm -Uvh mod_perl-1.26-5.i386.rpm
$ /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
$ ps ax | grep httpd
3002 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
3003 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
3004 ? S 0:00 /usr/sbin/httpd -DHAVE_DAV -DHAVE_PERL
3006 pts/1 S 0:00 grep httpd
$ /sbin/service httpd status # 起動する前にきれいに(?)停止しているか確認 httpdは停止していますがサブシテムがロックされています $ rm /var/lock/subsys/httpd # ロックファイルが残ったままだと起動できないことがあるので削除 $ /sbin/service httpd start httpdを起動中: [ OK ] $ kill -HUP `cat /var/run/httpd.pid` # 起動できたらローテーション時と同様に kill してみる $ tail -n 4 /var/log/httpd/error_log # ログで動作を確認 [Wed Sep 4 09:55:12 2002] [notice] SIGHUP received. Attempting to restart [Wed Sep 4 09:55:15 2002] [notice] Apache/1.3.26 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.0.6 mod_perl/1.26 mod_gzip/1.3.19.1a configured -- resuming normal operations [Wed Sep 4 09:55:15 2002] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Wed Sep 4 09:55:15 2002] [notice] Accept mutex: sysvsem (Default: sysvsem)
# rpm --rebuild squid-2.4.STABLE6-6.7.3.src.rpm # バイナリrpm リビルド
# sudo /sbin/service squid stop # squid を停止
# sudo rpm -Uvh RPMS/i386/squid-2.4.STABLE6-6.7.3.i386.rpm # リビルドした rpm でアップデート
# sudo /sbin/service squid start # squid を再開