码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-24 13:39:07      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:color   span   let   red   eterm   comm   bool   param   mapping   

最近线上服务经常 出现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占满,方法无法跳出 

 

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

标签:color   span   let   red   eterm   comm   bool   param   mapping   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!