Apacheの起動が極端に遅い場合の対処法

現象

起動が極端に遅く,ログが

[notice] Digest: generating secret for digest authentication ...

で止まっている.

原因

/dev/randomの読み込み時にブロッキングしている.

対処法 (Gentooの場合)

  • dev-libs/apr (Apache Portable Runtime Library) を urandom USEフラグ付きでコンパイル
  • sys-apps/rng-tools をインストールし,/etc/init.d/rngd start .

補足

  • /dev/randomと/dev/urandom

/dev/urandom デバイスから読み出しでは、エントロピーがより高くなるのを待つためのブロックは行われない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/random.4.html

$ ps ax -o pid,comm,wchan | grep apache
5647 apache2 random_read

より,カーネル内でブロッキングしていることを確認

# lsof -p 5647|grep rand
apache2 5647 root 9r CHR 1,8 2219 /dev/random

より,/dev/randomに関係していることを確認

# cat /proc/sys/kernel/random/entropy_avail
39
# cat /proc/sys/kernel/random/read_wakeup_threshold
64

より,エントロピーが低いことが原因と判断.
http://gentoo-wiki.com/Apache2_Install より,上記対策法を知る.