【发布时间】:2014-03-02 05:55:22
【问题描述】:
我正在使用 jbcrypt 对项目中的密码进行哈希处理。在我使用的硬件上验证密码时,性能大约为 500 毫秒(log_rounds 设置为 12)。 然而,在正常使用一段时间后,性能时间突然下降到惊人的 15 秒。下降非常突然,没有积聚,并且在重新启动过程之前保持不变。
Profiling 显示在 key(..) 方法中使用了额外的时间。
来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java
此方法仅使用 xor、and、shift 等基本函数计算哈希。没有对象分配、外部资源使用、随机数生成等。
性能不会因同一进程中的其他功能而下降。内存分配稳定且低。不涉及 Full GC。
有没有人以前见过这种情况或任何线索来解释为什么会发生这种情况?我可以理解在某种程度上取决于其他情况的可变性能,但这是从大约 500 毫秒开始的非常突然和稳定的下降。到大约 15000 毫秒。
【问题讨论】:
-
你调用什么函数来验证密码?
-
key本身只是对streamtoword和encipher的调用的固定长度循环。您的分析是否确定了在这些方法中花费的总时间? -
你能试试像visualvm这样的工具吗?它重量轻,可能有助于识别瓶颈。
-
@joe 不完全是这两种方法,但我同意很可能在那里使用时间。
标签: java performance security bcrypt jbcrypt