java jdk 随机数阻塞问题

背景:
Java 功能压测的时候,执行数据库sql缓慢分析报错,使用的Sharding-jdbc,进行了分库分表。高TPS访问时,遇到了瓶颈,
报错:
"http-bio-8088-exec-3762" - Thread t@188077
   java.lang.Thread.State: BLOCKED
    at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:543)
    - waiting to lock <404ee8b2> (a java.lang.Object) owned by "http-bio-8088-exec-3552" t@187443
    at sun.security.provider.NativePRNG$RandomIO.access$400(NativePRNG.java:331)
    at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:220)
    at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
    at java.util.UUID.randomUUID(UUID.java:145)
    at io.shardingsphere.core.event.ShardingEvent.<init>(ShardingEvent.java:32)
    at io.shardingsphere.core.event.executor.SQLExecutionEvent.<init>(SQLExecutionEvent.java:34)
    at io.shardingsphere.core.event.executor.DMLExecutionEvent.<init>(DMLExecutionEvent.java:34)
    at io.shardingsphere.core.event.executor.SQLExecutionEventFactory.createEvent(SQLExecutionEventFactory.java:51)
    at io.shardingsphere.core.executor.sql.execute.SQLExecuteCallback.execute0(SQLExecuteCallback.java:89)
    at io.shardingsphere.core.executor.sql.execute.SQLExecuteCallback.execute(SQLExecuteCallback.java:69)
    at io.shardingsphere.core.executor.ShardingExecuteEngine.syncGroupExecute(ShardingExecuteEngine.java:182)
    at io.shardingsphere.core.executor.ShardingExecuteEngine.groupExecute(ShardingExecuteEngine.java:158)
    at io.shardingsphere.core.executor.sql.execute.SQLExecuteTemplate.executeGroup(SQLExecuteTemplate.java:71)
    at io.shardingsphere.core.executor.sql.execute.SQLExecuteTemplate.executeGroup(SQLExecuteTemplate.java:54)
    at io.shardingsphere.shardingjdbc.executor.AbstractStatementExecutor.executeCallback(AbstractStatementExecutor.java:122)
    at io.shardingsphere.shardingjdbc.executor.PreparedStatementExecutor.execute(PreparedStatementExecutor.java:161)
    at io.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.execute(ShardingPreparedStatement.java:139)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
    at sun.reflect.GeneratedMethodAccessor501.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
    at com.sun.proxy.$Proxy49.update(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
    at com.sun.proxy.$Proxy79.updateByAgentNoAndTradeOrderNo(Unknown Source)
主要原因是底层 使用了java.util.UUID.randomUUID,其中sun.security.provider.NativePRNG$RandomIO.implNextBytes 获取随机数,上锁了,block.

 

目前解决方案:
在tomcat 配置中  -Djava.security.egd=file:/dev/./urandom

参考:https://www.cnblogs.com/softidea/p/9725156.html

转载于:https://www.cnblogs.com/shunxiyuan/p/11262579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值