乱数生成によるJVM遅延に対処する
LinuxなどでやけにTomcatやJVMの起動が遅い場合は要チェック。対処は難しくない。
Table of Contents
この記事は最終更新から3年以上経過しています。
オラクルのある製品のページでも解説されているのでそちらも参照。→ こちら
原因
「/dev/random」における乱数生成に時間がかかるのに伴い、JVMの遅延が発生する。
JVMの乱数生成においてUNIX系プラットフォームではデフォルトで「/dev/random」が使われている。ただし「/dev/random」は生成に時間がかかり、これがJVMの遅延につながる。乱数生成においては「/dev/urandom」もあり、厳密さに違いはあるが速く生成できる。
乱数を使用していない場合でも無関係とは限らない。例えばTomcatは起動時にセッションID用に乱数生成を行う。よってLinuxとTomcatのような組合せではこの問題にぶつかる可能性が高い。これが原因でTomcatの起動時間タイムアウトになることすらあるので、対処しておきたい。
対処
乱数の厳密さにこだわりがなければ「/dev/urandom」を使うようにJVMの設定を変更するだけ。
修正する設定ファイル
$JAVA_HOME/jre/lib/security/java.security
修正前(117行目ぐらい)
securerandom.source=file:/dev/random
修正後(117行目ぐらい)
#securerandom.source=file:/dev/random
securerandom.source=file:/dev/urandom
Appendix A: 参考
Appendix B: 改訂履歴
-
v1.0, 2016-07-23: 初稿