Mybatis 并发执行导致cpu占满的问题

最近线上服务经常 出现cpu达到100%的问题,发现都是执行oracle操作的方法就没有返回。经过排查,最后定位到cpu消耗在以下方法

System.Collections.Generic.Dictionary`2<system.type,system.boolean>.FindEntry (...)
System.Collections.Generic.Dictionary`2<system.__canon,system.boolean>.TryGetValue (...)
MyBatis.DataMapper.TypeHandlers.TypeHandlerFactory.IsSimpleType (...)
MyBatis.DataMapper.DataExchange.ComplexDataExchange.GetData (...)
MyBatis.DataMapper.Model.ParameterMapping.ParameterMap.SetParameter (...)
MyBatis.DataMapper.Data.DefaultPreparedCommand.ApplyParameterMap (...)
MyBatis.DataMapper.Data.DefaultPreparedCommand.Create (...)
MyBatis.DataMapper.MappedStatements.MappedStatement.Execute (...)
MyBatis.DataMapper.MappedStatements.MappedStatement.ExecuteUpdate (...)
MyBatis.DataMapper.DataMapper.Update (...)

查看IsSimpleType方法内部实现

public bool IsSimpleType(Type type)
        {
            bool result = false;

            if (!simpleTypes.TryGetValue(type, out result))
            {
                if (type != null)
                {
                    ITypeHandler handler = GetTypeHandler(type, null);
                    if (handler != null)
                    {
                        result = handler.IsSimpleType;
                    }
                    simpleTypes[type] = result;
                }
            }

            return result;
        }

Dictionary 操作没有加锁,get和set并发执行时就有几率导致cpu占满,方法无法跳出

原文地址:https://www.cnblogs.com/zr824946511/p/12090945.html

时间: 2024-10-09 06:56:59

Mybatis 并发执行导致cpu占满的问题的相关文章

网站CPU占满,微信经常SSL不能建立的错误排查

微信SSL经常建立失败的问题排查 问题描述 及应急方案 问题描述: 使用微信访问时,一段时间过后总会提示SSL连接无法建立[程序中需要获取用OpenId,因此有调用企业微信Api的请求] 应急方案:在Global.asax 文件中加入如下代码让服务器不验证证书,但是感觉用途不大,再重启了应用程序池后表现正常,但是一段时间后又出现ssl建立失败的情况. protected void Application_Start() { ServicePointManager.SecurityProtocol

关于多线程如何占满cpu的问题!

我想,既然大家都是看多线程的特殊用法了,想必应该对多线程有了一定的了解,接下来,我给大家解释一下如何用单进程多线程占满cpu吧. 首先,告诉大家一个常识: 单核环境下,空死循环会导致100%的CPU占有率.双核环境下,CPU总占有率大约为50%,四核是25%左右,那么,接下来就是创建4个线程将cpu占满即可! 代码如下:(刚看的关于C++11标准中的thread库类..) #include <iostream> #include <thread> #include <mute

C3P0配置优化,C3P0连接数占满后无法获取连接

场景:项目遇到持续高并发后,连接池一直无法获取到连接,检查后,发现连接池配置有点问题,做以下修改后正常: 配置修改: 1.breakAfterAcquireFailure=false,为true会导致连接池占满后不提供服务.所以必须为false 2.acquireRetryAttempts=10,获取连接失败时重试10次,默认重试30次,减少重试次数. 3.idleConnectionTestPeriod=30,每30秒检查一次空闲连接,加快释放连接. 4.maxIdleTime=10,连接10

实战开发经验: 如何降低CPU占用率

在软件开发和性能测试中,CPU占用率是一个很重要的指标,到底有哪些因素会导致CPU占用率上升呢?又有哪些手段可以降低CPU的占用率呢?本文是"Jhuster的专栏"的<实战开发经验 >系列又一篇文章,简单地总结了一下关于CPU占用率的那些事. 1. 如何测试CPU占用率? 首先,我们要学会如何测试程序的CPU占用率,这里简单地给出最基础的方法: Windows上可以通过Ctrl+Alt+Del组合调出"任务管理器",然后查看指定进程的详细信息即可. Li

刚装完Linux就CPU占用率高

top命令发现如下三个进程占据了前三的CPU使用率 wpa_supplicant NetworkManager rsyslogd google发现前两个进程与无线网络有关,我的电脑是笔记本,插的有线,无线被硬件禁止了,所以电脑一直在试图开启无线功能导致CPU占用率在空载的情况下达到80%的水平,后来在软件中也将无线给禁止了就好了.

IOCP大并发svchost.exe(NlaSvc服务)占满CPU问题分析

症状: 使用IOCP开发的SSLSpider(SSL证书扫描服务)运行一会后(4000并发),系统的一个svchost.exe一直满一个CPU内核(共4核). 分析: 此进程运行了4个服务: 停止WinRM.Dnscache都没用,停止NlaSvc超时了,应该是这货在作怪,Google... 真的是它! 「别人遇到的,貌似没找到解决方法 http://www.tomshardware.com/forum/302313-28-usage-minutes-turned-urgent」 暂时先停掉这个

线上Java程序导致服务器CPU占用率过高的问题排除过程

博文转至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,转本博文的目的就算是个书签吧,需要时候可以定位原文学习 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [[

oracle rac 11g 日志占满系统盘导致数据库down掉

oracle日志占满系统盘满了导致数据库挂掉 并且archivelog日志也满了倒是数据库无法open,无法登陆,幸好还可以到mount状态.解决办法: 1.根据报错查看 表象: crs 服务down掉 CRS-0184: Cannot communicate with the CRS daemon删除/var/tmp/.oracle 目录删除oracle alter日志:cd /u01/app/oracle/rdbms/bol/BOL1/alterrm -rf * 到此重启机器 可以启动ora

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

https://blog.csdn.net/u013991521/article/details/52781423 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [ylp@ylp-web-01 ~]$ top t