乱数生成によるJVM遅延に対処する

LinuxなどでやけにTomcatやJVMの起動が遅い場合は要チェック。対処は難しくない。

Table of Contents

オラクルのある製品のページでも解説されているのでそちらも参照。→ こちら

原因

「/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