仮想環境のゲストOS(Linux)でTomcat(正確にはJavaVM?)の起動がとても遅いときの対応です。
私がぶちあった例はKVM上のゲストOS(CentOS 7, CPU2, mem 4GB)で
インストール直後のデフォルトのTomcat 8が起動に20分近くかかりました。
(VMWareなどでも起きるようです。)
まず疑うことは2つです。
- メモリ不足
- エントロピー不足
切り分け
- tomcatを起動する
- 下記を実行して、出てきた数値(エントロピー)を確認する。
※念のため数秒程度監視してください。
# cat /proc/sys/kernel/random/entropy_avail
でてきた数値が1000以下になっていたら、エントロピー不足です。
エントロピー不足の対応
- Havegedをインストールしてください。
- もしくは乱数生成に伴う JVM の遅延の回避を行ってください。
※ どちらかだけを対応すればOKなはずです。
これで解決しない場合はメモリ不足ですので、KVMマシンのメモリ割り当ての確認と
Tomcatの起動オプションを確認しましょう。
(調べればいくらでも情報はでてきますので割愛します。)
少し話はそれますが、Linuxのエントロピーの生成方法を調べると原因がよくわかります。
Linuxで扱う乱数に関する話の「仮想化の問題」を参照
ぱっと調べてでてこなかったので、これで苦労する人が減ることを祈ります。