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. 用SignalR和Layui搭建自己的web聊天网站

    1.开发背景 之前是做项目一直有一个困扰,就是如何进行及时通讯,本人.Net开发,不太想用别人的接口,然后偶然的机会知道了SignalR,那么什么是SignalR呢? 2.SignalR简介 ASP. ...

  2. server_patrol.sh服务器巡查脚本

    server_patrol.sh #!/bin/bash #!/usr/bin/expect -f#! auther by wangxp #定义一个变量 LANG="zh_CN.UTF-8& ...

  3. Mac安装Flink

    版本 Flink  flink-1.13.1-bin-scala_2.11.tgz 依赖scala2.12 一.下载 https://archive.apache.org/dist/flink/ 解压 ...

  4. AI 如何重塑劳动力市场:基于 Claude 数据的深度分析

    前言 本文翻译自 Anthropic 今天发布的 The Anthropic Economic Index ,经济指数报告,这份报告基于 Claude 的数据对目前的 AI 使用情况做了汇总. 引言 ...

  5. 「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!

    > 由于网页编辑器简陋,无法实现原文档的精心排版,如需原文档可联系... 序 「ximagine」在本篇文章中将介绍「荒岛」目前所使用的显示器测试流程及标准,我们主要使用Calman.Displ ...

  6. 探秘Transformer系列之(3)---数据处理

    探秘Transformer系列之(3)---数据处理 接下来三篇偏重于工程,内容略少,大家可以当作甜点 _. 0x00 概要 有研究人员认为,大模型的认知框架看起来十分接近卡尔·弗里斯顿(Karl F ...

  7. [CF576E] Painting Edges 题解

    模版题的升级了. 使用二分图经典判定方法(一个点拆成两个点 \(x,x+n\),连边 \((x,y)\) 就是连接 \((x,y+n),(x+n,y)\),那么是否是二分图就等价于判断 \(x,x+n ...

  8. MD5 - windows也可以查询某个文件的MD5码

    命令格式 certutil -hashfile 文件名称 md5 示例 Microsoft Windows [版本 10.0.22621.1702] (c) Microsoft Corporation ...

  9. Deepseek学习随笔(12)--- 清华大学发布第4弹:DeepSeek+DeepResearch让科研像聊天一样简单(附网盘链接)

    一.文档简介 清华大学发布的<DeepSeek+DeepResearch让科研像聊天一样简单>介绍了如何通过DeepSeek和DeepResearch工具简化科研流程,提升研究效率.文件分 ...

  10. 重生之数据结构与算法----队列&栈

    简介 上文说到,数据结构只有两种.其它的数据结构都是它的整花活. 栈 栈只能在表的一端(称为栈顶)进行插入和删除操作,遵循 "后进先出"(Last In First Out,LIF ...