JDK版本:

JDK8u192

bug:

https://bugs.openjdk.org/browse/JDK-8206333

堆栈:

"Common-Business-Thread-572" Id=1723 BLOCKED

at java.security.Provider.getService(Provider.java:1035)

at sun.security.jca.ProviderList.getService(ProviderList.java:332)

at sun.security.jca.GetInstance.getInstance(GetInstance.java:157)

at java.security.Security.getImpl(Security.java:695)

at java.security.MessageDigest.getInstance(MessageDigest.java:167)

at net.rubyeye.xmemcached.HashAlgorithm.computeMd5(HashAlgorithm.java:204)

at net.rubyeye.xmemcached.HashAlgorithm.hash(HashAlgorithm.java:133)

at net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator.getSessionByKey(KetamaMemcachedSessionLocator.java:200)

at net.rubyeye.xmemcached.XMemcachedClient.catalogKeys(XMemcachedClient.java:1219)

at net.rubyeye.xmemcached.XMemcachedClient.getMulti0(XMemcachedClient.java:1156)

at net.rubyeye.xmemcached.XMemcachedClient.get(XMemcachedClient.java:1055)

at net.rubyeye.xmemcached.XMemcachedClient.get(XMemcachedClient.java:1088)

"Common-Business-Thread-119" Id=255 BLOCKED

at java.security.Provider.getService(Provider.java:1035)

at sun.security.jca.ProviderList.getService(ProviderList.java:332)

at sun.security.jca.GetInstance.getInstance(GetInstance.java:157)

at java.security.Security.getImpl(Security.java:695)

at java.security.MessageDigest.getInstance(MessageDigest.java:167)

at org.apache.commons.codec.digest.DigestUtils.getDigest(DigestUtils.java:68)

at org.apache.commons.codec.digest.DigestUtils.getMd5Digest(DigestUtils.java:98)

at org.apache.commons.codec.digest.DigestUtils.md5(DigestUtils.java:260)

at org.apache.commons.codec.digest.DigestUtils.md5Hex(DigestUtils.java:296)

问题分析:

  1. 频繁调用了MessageDigest.getInstance,就会调用Provider.getService (有synchronized关键字)
  2. DigestUtils.md5Hex 每次调用都会去调用MessageDigest.getInstance,而HashAlgorithm.computeMd5则是只有线程第一次计算MD5,才会去调用MessageDigest.getInstance

目前解决方案:

  1. 升级JDK版本 参考:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7092821 (建议这一步,但是高版本jdk要收费)
  2. 优化DigestUtils,效仿HashAlgorithm.computeMd5,把MessageDigest 存到去线程变量中,减少MessageDigest.getInstance调用

    代码调整:
// DigestUtils.md5Hex 变成Hex.encodeHexString(HashAlgorithm.computeMd5)

@Test
public void test() {
String data = "HELLO WORLD";
String expect = DigestUtils.md5Hex(data);
//
byte[] bytes = HashAlgorithm.computeMd5(data);
String actual = Hex.encodeHexString(bytes);
Assert.assertEquals(expect, actual);
}

java.security.provider.getservice blocked的更多相关文章

  1. java.security KeyPairGenerator

    KeyPairGenerator 类用于生成公钥和私钥对.密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的. 特定算法的密钥对生成器可以创建能够与此算法一起 ...

  2. Exception | java.security.NoSuchProviderException: no such provider: BC

    背景 今天在用PGP key做JWT签名和验签的时候,转换报了如下错误: org.bouncycastle.openpgp.PGPException: exception on setup: java ...

  3. 解决 java 使用ssl过程中出现"PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"

    今天,封装HttpClient使用ssl时报一下错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc ...

  4. java.security.NoSuchAlgorithmException: Cannot find any provider supporting DESede/CBC/PKCS5Padding

    最近在做3DES加密,在本地window下面运行ok的程序,放到linux环境上竟然报错: Java.security.NoSuchAlgorithmException: Cannot find an ...

  5. java.security.NoSuchProviderException: no such provider: BC 的问题解决

    第一种方式 1.修改以下两个文件 %JDK_Home%\jre\lib\security\java.security %JRE_Home%\jre\lib\security\java.security ...

  6. java程序中访问https时,报 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    在java中使用https访问数据时报异常: Caused by: sun.security.validator.ValidatorException: PKIX path building fail ...

  7. 【问题记录】Java服务发起HTTPS请求报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException

    问题报错 今天上线了我开发的一个OAuth2单点登录客户端的实现,在测试系统验证没问题,到生产环境由于单点登录服务端HTTPS协议,报错如下: I/O error on POST request fo ...

  8. Java Security:Java加密框架(JCA)简要说明

    加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...

  9. What is the reason for - java.security.spec.InvalidKeySpecException: Unknown KeySpec type: java.security.spec.ECPublicKeySpec

    支付中心Project重构完成,经过本地测试,并未发现问题.发布到测试环境后,测试发现请求光大扫码https接口时,出现了如下的异常: javax.net.ssl.SSLException: Serv ...

  10. How to resolve "your security settings have blocked an untrusted application from running" in Mac

    If you encounter the error "your security settings have blocked an untrusted application from r ...

随机推荐

  1. 微信小程序音频播放

    微信小程序音频播放 // 开启播放音频 startAudio(){ const innerAudioContext = uni.createInnerAudioContext();//创建并返回内部 ...

  2. 舞台已就位!坐等AI玩家集结!

    舞台已就位!坐等AI玩家集结!

  3. 天翼云完成首个国产化万卡训练,MFU达到国内领先水平!

    天翼云自研国内首个单集群万卡国产化全功能预训练云服务平台发布上线,并完成万卡规模Llama3.1-405B大模型训练.Llama3.1-405B作为4000亿参数的模型,在息壤训推服务平台的支持下经过 ...

  4. StarUML画时序图

    一.打开软件,新建时序图 二.画图 2.1 新建用户图标 2.2 新建几个生命线Lifeline 2.3 建立连接关系 2.4 图例

  5. mybatis之使用Map和模糊查询

    使用Map 接口类 package com.yeyue.dao; import com.yeyue.pojo.User; import java.util.List; import java.util ...

  6. 推荐几款开源且免费的 .NET MAUI 组件库

    前言 今天大姚给大家推荐 3 款开源且免费的 .NET MAUI 组件库. .NET MAUI介绍 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML ...

  7. 【COM3D2Mod 制作教程(3)】Mod 制作概要

    [COM3D2Mod 制作教程(3)]Mod 制作概要 制作工具整合包:https://mod.3dmgame.com/mod/205516 该工具包简单整合了些本章需要的小型工具.插件.以及其他一些 ...

  8. DOS使用技巧整理 [典型案例分享]

    最早于2008年系统地学习MS-Dos,当时刚初中毕业.从小深受父亲影响,对电脑的技术比较感兴趣,特别是对DOS.随着学习得不断深入,接触了大量数字媒体软件.框架还有编程界的知识,发现DOS有不可磨灭 ...

  9. mybatis-generator 自动生成mybatis代码与xml

    一.pxm.xml中引入mybatis-generator并配置 在build节点下的plugins下添加org.mybatis.generator 示例代码如下: <?xml version= ...

  10. Win系统重装备忘

    蒙德,致态的盘坏块激增,似乎损坏到了系统文件:屏幕截屏会卡,关机后直接该块硬盘内的文件内容回滚,出现驱动报错要求重启... 然后尝试了DiskGenuis迁移系统,PE模式不能用,热迁移后似乎正常分区 ...