jBcrypt:BCrypt.checkpw突然需要大约30倍的时间

时间:2015-09-28 10:31:05

标签: bcrypt jbcrypt

在我们的网络应用程序中,我们使用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上只发现了一个类似的问题,但在我们的案例中,多个类加载器不能成为问题:  Variable and degrading performance when using jbcrypt

有谁知道这里发生了什么?

0 个答案:

没有答案