gpt4 book ai didi

java - 带有 SHA2 的 JasyptStringDigester 突然变得很慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:32 25 4
gpt4 key购买 nike

在我的 Web 应用程序中,登录密码经过哈希处理并使用 JasyptStringDigester 和 SHA256 进行保存。在登录过程中,用户输入的密码将使用相同的摘要进行哈希比较。

但是,应用运行了大约2天后,登录突然变得很慢。一旦发生这种情况,我必须重新启动服务器才能恢复。

通过线程转储,我发现速度下降是由消化器引起的,它耗尽了 CPU 资源。我曾尝试将 JCE 提供程序从默认提供程序更改为 bouncycaSTLe,但没有帮助。

出现这个问题时,我也查看了JVM中的内存使用情况,但是有很多。

环境:

JDK 7u60

JBoss 7.1.1 最终版本

消化器配置(用作单例):

<bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
<property name="provider" ref="bouncyCastleProvider" />
<property name="algorithm" value="SHA-256" />
<property name="iterations" value="100000" />
<property name="saltGenerator">
<bean id="zeroSaltGenerator" class="org.jasypt.salt.ZeroSaltGenerator"/>
</property>
<property name="saltSizeBytes" value="10"/>
</bean>


<bean id="bouncyCastleProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider"/>

线程转储:

	"ajp--10.88.90.34-8009-22" daemon prio=10 tid=0x00007ff2100ad800 nid=0xc7e runnable [0x00007ff1a9ae4000]
java.lang.Thread.State: RUNNABLE
at org.bouncycastle.crypto.digests.SHA256Digest.Sum0(Unknown Source)
at org.bouncycastle.crypto.digests.SHA256Digest.processBlock(Unknown Source)
at org.bouncycastle.crypto.digests.GeneralDigest.finish(Unknown Source)
at org.bouncycastle.crypto.digests.SHA256Digest.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.digest.BCMessageDigest.engineDigest(Unknown Source)
at java.security.MessageDigest.digest(MessageDigest.java:353)
at java.security.MessageDigest.digest(MessageDigest.java:399)
at org.jasypt.digest.StandardByteDigester.digest(StandardByteDigester.java:979)
- locked <0x0000000748e4a9c0> (a org.bouncycastle.jcajce.provider.digest.SHA256$Digest)
at org.jasypt.digest.StandardByteDigester.digest(StandardByteDigester.java:933)

有人愿意帮忙吗?很长一段时间以来,我一直陷入这个问题。在 https://bugs.openjdk.java.net/browse/JDK-8023983 中发现了类似的问题但我找不到任何解决方案。

谢谢。

最佳答案

我有完全相同的问题,熵不是原因。 SHA256 摘要不需要随机。问题是 JIT(及时)编译机制允许直接在 native 代码中编译一些热点功能。 JDK7 中有一个已知问题,请参阅:http://www.oracle.com/technetwork/java/javase/documentation/javase7supportreleasenotes-1601161.html当代码缓存已满时禁用 native 编译器。在这种情况下,SHA 摘要不会在 native 执行并变得很长!

要重现只需禁用编译器:

-Djava.compiler=NONE 

解决方案是迁移到 Java 8,Java 7 的解决方法是使用 JVM 选项根据您的需要增加 CodeCache 大小。

-XX:ReservedCodeCacheSize=300m

您可以通过 JConsole 监控您的代码缓存:

enter image description here

希望对你有帮助:)

埃里克

关于java - 带有 SHA2 的 JasyptStringDigester 突然变得很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com