高CPU、数据库无法读写的真凶

 

有兴趣的同学可以参考如下系列文章,都是针对dump分析的实战和总结:

Windbg DUMP分析(原创汇总)

http://www.cnblogs.com/LoveOfPrince/p/6653341.html

记一次内存泄漏DUMP分析

http://www.cnblogs.com/LoveOfPrince/p/6032523.html

-------------------------------------------------回归正题----------------------------------------------------------------------

前些天某个服务,线上CPU经常飙到很高,且其它服务间歇性的无法读写数据库。

攻城狮们查了几天,没有明显发现。

后来,他们抛了一个dump给我,初步分析只有该服务使用了公司内基于EF自建的仓储,问题应该在这里。

苦于没有该仓储的代码权限,且手上事情较多,就先让他们自己查下该仓储。

第二天顺手要了该仓储的代码,又抓了几个dump,基本敲定,细节如下:

1.托管线程堆栈大多停留在如下,且占用不少耗时。

DatabaseLogFormatter.Executing
000000000e6bbfb8 0000000077c2bd7a [HelperMethodFrame: 000000000e6bbfb8]
000000000e6bc100 000007fe99238fc0 System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter.Executing[[System.__Canon, mscorlib]](System.Data.Common.DbCommand, System.Data.Entity.Infrastructure.Interception.DbCommandInterceptionContext`1<System.__Canon>)
000000000e6bc160 000007fe99238ec6 System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter.ReaderExecuting(System.Data.Common.DbCommand

2.进一步分析,二代龄要回收的对象太多。

Heap 0
generation 0 has 35 finalizable objects (000000000f312ec0->000000000f312fd8)
generation 1 has 4 finalizable objects (000000000f312ea0->000000000f312ec0)
generation 2 has 48152 finalizable objects (000000000f2b4de0->000000000f312ea0)
Ready for finalization 0 objects (000000000f312fd8->000000000f312fd8)
------------------------------
Heap 1
generation 0 has 12 finalizable objects (000000001165a780->000000001165a7e0)
generation 1 has 3 finalizable objects (000000001165a768->000000001165a780)
generation 2 has 49727 finalizable objects (00000000115f9570->000000001165a768)
Ready for finalization 0 objects (000000001165a7e0->000000001165a7e0)
------------------------------
Heap 2
generation 0 has 19 finalizable objects (00000000115a4c30->00000000115a4cc8)
generation 1 has 9 finalizable objects (00000000115a4be8->00000000115a4c30)
generation 2 has 42725 finalizable objects (00000000115514c0->00000000115a4be8)
Ready for finalization 0 objects (00000000115a4cc8->00000000115a4cc8)
------------------------------
Heap 3
generation 0 has 18 finalizable objects (000000000f36a9b8->000000000f36aa48)
generation 1 has 14 finalizable objects (000000000f36a948->000000000f36a9b8)
generation 2 has 44483 finalizable objects (000000000f313b30->000000000f36a948)
Ready for finalization 0 objects (000000000f36aa48->000000000f36aa48)

且这些对象大都是EF相关的。

              MT    Count    TotalSize Class Name
000007fef694bb40 3162 227664 System.Reflection.Emit.DynamicResolver
000007fef68e76d0 36109 866616 System.WeakReference
000007fe987e9f40 35941 4887976 System.Data.Entity.Core.EntityClient.EntityConnection
000007fe987d75f0 37157 5053352 MySql.Data.MySqlClient.MySqlConnection
000007fe987e7d58 35952 6615168 System.Data.Entity.Core.Objects.ObjectContext
000007fe98814690 35952 8053248 System.Data.Entity.Internal.LazyInternalContext

3.如上来看,疑点还是在仓储这块。

跟踪堆栈,来看MySqlConnection的话,考虑XDbContext : IDisposable的销毁方式是不是不够直接彻底。

这里读的连接没有销毁,印证了上述推断,再让他们检查一下该服务中有没有正确使用该仓储即可。

高CPU、数据库无法读写的更多相关文章

  1. Mycat - 实现数据库的读写分离与高可用

    前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...

  2. csla 与高cpu

    在项目中一直使用csla 4.13. 项目一直正常,但是偶尔会出现iis占用的cpu 突然100%, 后面客户量大的情况,加入了缓存的机制.100%的情况出现的更多了. 当时有数据库死锁的原因.cpu ...

  3. NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel

    NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...

  4. 如何轻松实现MySQL数据库的读写分离和负载均衡?

    配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ...

  5. 使用SQL-Server分区表功能提高数据库的读写性能

    首先祝大家新年快乐,身体健康,万事如意. 一般来说一个系统最先出现瓶颈的点很可能是数据库.比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大.海量的数据会严重影响数据库的读写 ...

  6. Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案

    1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...

  7. 高版本->低版本迁移,低版本客户端连接高版本数据库EXP导出报错EXP-00008,ORA-01455,EXP-00000

    生产环境: 源数据库:RHEL + Oracle 11.2.0.3 目标数据库:HP-UX + Oracle 10.2.0.4   需求:迁移部分表  11.2.0.3-->10.2.0.4,若 ...

  8. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  9. 如何定位死循环或高CPU使用率(linux)

    如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...

随机推荐

  1. 1.Dubbo教程

    转自:https://blog.csdn.net/hellozpc/article/details/78575773 2. 什么是dubbo 2.1. 简介 DUBBO是一个分布式服务框架,致力于提供 ...

  2. [转]DOM0,DOM2,DOM3事件处理方式区别

    转 DOM0,DOM2,DOM3事件处理方式区别 2016年07月13日 15:00:29 judyge 阅读数:1457更多 个人分类: js与前端   引子:        文档对象模型是一种与编 ...

  3. 【“玲珑杯”ACM比赛 Round #20 H】康娜的数学课

    [链接]http://www.ifrog.cc/acm/problem/1161 [题意] 在这里写题意 [题解] 首先x<l肯定无解; 然后,肯定是要选其中的一些数字的. 而且这些数字肯定是大 ...

  4. JSP语法基础(一)

    一.JSP页面中的凝视 (1)HTML凝视 <!-- comment [ <%=expression %> ] --> 能在client显示的一种凝视,标记内的全部JSP脚本元 ...

  5. js进阶 14-3 如何接收load函数从后台接收到的返回数据

    js进阶 14-3 如何接收load函数从后台接收到的返回数据 一.总结 一句话总结:load方法的回调函数的参数即可接收从后台的返回数据. 1.load方法的回调函数的参数是什么? 语法:load( ...

  6. iOS_07_流程控制

    一.流程控制 * 顺序结构:默认的流程结构.按照书顺序执行每一条语句. * 选择结构:对给定得条件进行判断,再根据判断结果来决定执行哪一段代码. * 循环结构:在给定条件成立的情况下,反复执行某一段代 ...

  7. (转)iptables详细教程:基础、架构、清空规则、追加规则、应用实例

    转自:http://lesca.me/archives/iptables-tutorial-structures-configuratios-examples.html iptables防火墙可以用于 ...

  8. 【Struts2三】拦截器

    拦截器:就是在訪问action之前.对其进行拦截!能够在拦截器中做一些逻辑的处理! 比方权限验证.没有权限就不给予訪问! 拦截器等效于servlet中的过滤器! 使用拦截器步骤: 1.定义自己的拦截器 ...

  9. [Web Security] Create a hash salt password which can stored in DB

    We cannot directly store user password in the database. What need to do is creating a hashed & s ...

  10. eclipse config 2 tab -&gt; space

    编码规范要求不同意使用tab,可是又要有4个字符的缩进,连点4次space,这不是程序猿的风格 来看看 eclipse 设置一次tab像space的转换 例如以下操作 Window->Prefe ...