7

私たちの Web アプリケーションでは、パスワードのハッシュにjBcryptを使用しています。パスワードをハッシュするとき、 13個のlog_roundsを使用します。

通常、BCrypt.checkpw()には約 1 秒かかります。しかし、ときどき (数日後)、突然速度が低下し始め、その時点から約 30 秒かかり、通常の速度に回復しません。ここで役立つのは、Tomcat を再起動することだけです。

たとえば、CPU 負荷が高い場合や GC が実行されている場合など、それが時々発生したかどうかは不思議ではありません。しかし、そうではなく、突然遅くなり始めます。ログイン プロセスのみが影響を受けますが、アプリケーションの残りの部分は依然として高速です。また、決定可能なメモリ リークやその他のパフォーマンスの問題もありません。遅いのは BCrypt.checkpw() だけです。スレッド ダンプは、時間がBCrypt.checkpwと後続のメソッド呼び出し、特にBCrypt.encipherによって消費されていることを示しています。

Thread 8597: (state = IN_JAVA)
 - org.mindrot.jbcrypt.BCrypt.encipher(int[], int) @bci=0, line=490 (Interpreted frame)
 - org.mindrot.jbcrypt.BCrypt.key(byte[]) @bci=122, line=562 (Interpreted frame)
 - org.mindrot.jbcrypt.BCrypt.crypt_raw(byte[], byte[], int) @bci=89, line=629 (Compiled frame)
 - org.mindrot.jbcrypt.BCrypt.hashpw(java.lang.String, java.lang.String) @bci=226, line=692 (Interpreted frame)
 - org.mindrot.jbcrypt.BCrypt.checkpw(java.lang.String, java.lang.String) @bci=3, line=763 (Interpreted frame)

ここSOで同様の問題を1つだけ見つけましたが、この場合、複数のクラスローダーが問題になることはありません。

ここで何が起こっているのか誰にも分かりませんか?

4

0 に答える 0