6

我正在使用 jbcrypt 在项目中对密码进行哈希处理。在我使用的硬件上验证密码时,性能大约为 500 毫秒(log_rounds 设置为 12)。然而,在正常使用一段时间后,性能时间突然下降到惊人的 15 秒。下降非常突然,没有积聚,并且在重新启动过程之前保持不变。

剖析显示在 key(..) 方法中使用了额外的时间。

资料来源:http: //jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java

此方法仅使用 xor 和 shift 等基本函数计算哈希。没有对象分配、外部资源使用、随机数生成等。

在同一进程中,其他功能的性能不会下降。内存分配稳定且低。不涉及 Full GC。

有没有人以前见过这个或任何线索来解释为什么会发生这种情况?我可以理解在某种程度上取决于其他情况的可变性能,但这是从大约 500 毫秒开始的非常突然和稳定的下降。约 15000 毫秒。

4

2 回答 2

4

SecureRandom可能会耗尽熵并导致此问题。

请参阅如何使用 Java SecureRandom 解决性能问题?

于 2014-02-07T14:45:04.907 回答
3

事实证明,这与类加载有关。该库被加载到许多不同的类加载器中。当我们在系统类加载器中加载库时,问题就消失了。

于 2014-02-15T21:52:00.933 回答