我使用jbcrypt在一个项目中散列密码。在我使用的硬件上验证密码时,性能大约是500 ms (log_rounds设置为12)。然而,经过一段时间的定期使用,表演时间突然下降到惊人的15秒。下降是非常突然的,没有积累,并保持不变,直到进程重新启动。
分析显示,在键(..)中使用了额外的时间方法。
来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java
该方法只使用xor、shift等基本函数计算散列,不存在对象赋值、外部资源使用、随机数生成等问题。
对于同一进程中的其他功能,性能不会下降。内存分配稳定且低。不涉及完整的GC。
以前有没有人见过这个,或者有什么线索知道为什么会这样?我可以理解一个可变的性能,在某种程度上取决于其他情况,但这是一个非常突然和稳定的下降,从大约500毫秒。大约15000毫秒。
发布于 2014-02-15 21:52:00
结果发现,这与类加载有关。这个库装入了许多不同的类加载器。当我们在系统类加载器中加载库时,问题消失了。
发布于 2014-02-07 14:45:04
SecureRandom有可能耗尽了熵,从而导致了这个问题。
https://stackoverflow.com/questions/21583395
复制相似问题