オラクルフォーラムからの回答、こちら :
java.security.SecureRandom
sunが提供する標準APIです。このクラスが提供するさまざまなメソッドの中でvoid nextBytes(byte[])
。
このメソッドは、ランダムバイトを生成するために使用されます。 Oracle 11g JDBCドライバーは、このAPIを使用して、ログイン中にランダムな数値を生成します。 Linuxを使用しているユーザーは、SQLException("Io exception: Connection reset")
に遭遇しています。 。
問題は2つあります:
-
SecureRandom.nextBytes(byte[])
の場合、JVMは/ tmp(または-Djava.io.tmpdirによって設定された代替tmpディレクトリ)内のすべてのファイルを一覧表示しようとします。 が呼び出されます。ファイルの数が多い場合、メソッドの応答に時間がかかるため、サーバーがタイムアウトします -
メソッド
に遭遇します。void nextBytes(byte[])
Linuxおよびランダム番号生成ハードウェアがない一部のマシンで/dev/ randomを使用すると、ログインプロセス全体が停止する程度まで操作が遅くなります。最終的に、ユーザーはSQLException( "Io例外:接続リセット")
基盤となるOSが障害のあるハードウェアで実行されているLinuxである場合、11gにアップグレードするユーザーはこの問題に遭遇する可能性があります。
この原因はまだ正確には特定されていません。ハードウェアに問題があるか、何らかの理由でソフトウェアがdev/random
から読み取れないという事実のいずれかである可能性があります。
解決策 この設定をjvmに追加しているようです
-Djava.security.egd=file:/dev/./urandom