sun.security.provider.SHA2使用100%cpu并在一段时间后挂起5分钟

 shengxin11 发布于 2023-01-29 14:53

我有一个奇怪的行为,也许你可以帮助我.

环境是

jdk_7u40(尝试jdk_7u51具有相同的行为)

debian 6.0(在windows上我从未遇到过这个问题)

jboss 7.1.1

Geoserver 2.4.x(尝试.3和.4,结果相同),它基于spring框架

其他战争模块(不是基于弹簧的,但geoserver对它们有一些依赖)

问题是,在jboss运行几个小时之后,当我尝试登录geoserver的web界面(对j_spring_security servlet的POST)时,花了很多时间(4-5分钟)登陆欢迎页面应用程序.

使用jstack,我发现有一个线程一直消耗100%的核心,并且这个过程在这里继续工作

at sun.security.provider.SHA2.lf_S(SHA2.java:162)
at sun.security.provider.SHA2.lf_sigma0(SHA2.java:171)
at sun.security.provider.SHA2.implCompress(SHA2.java:225)
at sun.security.provider.SHA2.implDigest(SHA2.java:118)
at sun.security.provider.DigestBase.engineDigest(DigestBase.java:186)
at sun.security.provider.DigestBase.engineDigest(DigestBase.java:165)
at java.security.MessageDigest$Delegate.engineDigest(MessageDigest.java:576)
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 <0x00000006f8c30bb0> (a java.security.MessageDigest$Delegate)
at org.jasypt.digest.StandardByteDigester.matches(StandardByteDigester.java:1099)
at org.jasypt.digest.StandardStringDigester.matches(StandardStringDigester.java:1052)
at org.jasypt.util.password.StrongPasswordEncryptor.checkPassword(StrongPasswordEncryptor.java:99)
at org.jasypt.spring.security3.PasswordEncoder.isPasswordValid(PasswordEncoder.java:204)
at org.geoserver.security.password.AbstractGeoserverPasswordEncoder.isPasswordValid(AbstractGeoserverPasswordEncoder.java:138)
at org.geoserver.security.password.GeoServerMultiplexingPasswordEncoder.isPasswordValid(GeoServerMultiplexingPasswordEncoder.java:75)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:64)

有些人有类似的问题吗?

编辑(有解决方法)

我发现问题与CMS垃圾收集器和permgen空间的增加有关.

环境

应用程序服务器是JBoss 7.1.1,其中部署了5个war(Geoserver等).所有战争都有共同的依赖关系(也有Geoserver); Java正在运行-XX:+UseParallelOldGC -XX:SoftRefLRUPolicyMSPerMB=36000

怎么了

当执行一个完整的GC,PermGen的空间增加了许多上方的使用.之后,方法的计算sun.security.provider.SHA2.*变得非常缓慢.

我是怎么解决的

转移到G1GC垃圾收集器为我解决了问题(目前我正在使用以下选项-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=1 -XX:NewRatio=1 -XX:MaxTenuringThreshold=15 -XX:G1HeapRegionSize=32m)

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有