CentOS 6.6 32ビットおよびopenJDK7でTomcat 7.0.57を使用しています。サーバー(実稼働環境)でTomcatの14の異なるインスタンスを起動すると、それらの多くは起動に時間がかかりすぎます。
これはスタートアップログの一部であり、常にどこで処理されているかを示します
Jan 28, 2015 2:49:41 PM org.Apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [199,620] milliseconds.
この問題のベストプラクティス/解決策は何ですか?
ありがとう!
/ dev/randomにそれらを供給するのに十分なエントロピーがないため、安全なランダム呼び出しはブロックしている可能性があります。
回線がある場合
securerandom.source=file:/dev/random
/jre/lib/security/Java.securityで、これをurandomに変更すると、状況が改善される可能性があります(おそらくこれは既にデフォルトです)。
または、ここでプールに給餌する方法に関するいくつかの提案があります
https://security.stackexchange.com/questions/89/feeding-dev-random-entropy-pool
同じ問題に直面しました issue Tomcatが遅すぎて起動できません。 DigitalOceanに関するこの記事 に従い、urandomを使用する代わりにhavegedをインストールしました。
havegedを使用すると、プロセッサでのコード実行時間の変動に基づいてランダム性を生成できます。同じハードウェア上の同じ環境であっても、1つのコードで同じ正確な時間を実行することはほぼ不可能なので、1つまたは複数のプログラムを実行するタイミングは、ランダムソースをシードするのに適しているはずです。 haveged実装は、ループを繰り返し実行した後、プロセッサのタイムスタンプカウンター(TSC)の違いを使用して、システムのランダムソース(通常は/ dev/random)をシードします。
この記事の手順に従ってください。 https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged
投稿しました こちら
ヘンリーの答えに従って、Tomcatだけを調整するための具体的な手順を次に示します。
/etc/Tomcat/fastersecurerandom.properties
を作成
securerandom.source=file:/dev/urandom
Java_OPTS
内の/etc/Tomcat/tomcat.conf
を編集します
Java_OPTS="-Djava.security.properties=/etc/Tomcat/fastersecurerandom.properties"
参考までに、コメントアウトされた例にもかかわらず、複数のJava_OPTS
をJava_OPTS="$Java_OPTS ..."
で設定できないことがわかりました。 /var/log/messages
の警告に従って、古い混乱したTomcat 7が起動しない
異なるバージョン/フレーバーでは、Tomcatの環境変数を設定するのに最適な場所のバリエーションが見つかる場合があります。それらが影響を及ぼしているかどうかをデバッグする最良の方法は、次のように実行されているコマンドをチェックすることです。
$ ps aux | grep Java
Tomcat 4821 4.7 13.9 2626888 263396 ? Ssl 22:31 0:23 /usr/lib/jvm/jre/bin/Java -DJENKINS_HOME=/opt/jenkins/ -Xmx512m -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Djava.security.properties=/etc/Tomcat/fastersecurerandom.properties -classpath /usr/share/Tomcat/bin/bootstrap.jar:/usr/share/Tomcat/bin/Tomcat-juli.jar:/usr/share/Java/commons-daemon.jar -Dcatalina.base=/usr/share/Tomcat -Dcatalina.home=/usr/share/Tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/Tomcat/temp -Djava.util.logging.config.file=/usr/share/Tomcat/conf/logging.properties -Djava.util.logging.manager=org.Apache.juli.ClassLoaderLogManager org.Apache.catalina.startup.Bootstrap start
上記の@KCDの答えはほとんど私のために働いた、私はそれを少しマッサージする必要がありました-次のように:
1)私のTomcatは_Tomcat7
_だったので、_fastersecurerandom.properties
_ディレクトリに_/etc/Tomcat7
_ファイルを作成し、
2) 別のページ に従って、_fastersecurerandom.properties
_の内容を変更する必要がありました
_securerandom.source=file:/dev/urandom
_
に
_securerandom.source=file:/dev/./urandom
_
3)_Tomcat.conf
_ファイルがなかったので、行の直前に_/etc/init.d/Tomcat7
_(Tomcatの起動スクリプト-知っています)を追加しました-catalina_sh() {
_Java_OPTS="$Java_OPTS -Djava.security.properties=/etc/Tomcat7/fastersecurerandom.properties"
_
注:ここでもTomcat
に_7
_を追加しました。
_ps -deaf | grep Tomcat
_を実行して、最初に新しい_-D
_設定がコマンドに到達していることを確認し、正しいファイルを参照していること、およびファイルがそこにあることを確認することは価値がありました。これは、_7
_が欠落していることに気づいたときです。
私はJava 1.7、およびUbuntu 14.04.1。
ファイルを変更する代わりにJava.security
直接、少なくともJava 8では、以下のシステムプロパティを既にサポートすることを文書化しています:
-Djava.security.egd=file:/dev/random
Tomcatのコンテキストでは、これを使用してファイルを作成できますbin/setenv.sh
次の行を含む:
CATALINA_OPTS=-Djava.security.egd=file:///dev/urandom
以下の/jre/lib/security/Java.securityを変更しました:securerandom.source = file:/ dev /./ urandom