高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`<System.__Canon>)
000000000e6bc160 000007fe99238ec6 System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter.ReaderExecuting(System.Data.Common.DbCommand
2.进一步分析,二代龄要回收的对象太多。
Heap
generation has finalizable objects (000000000f312ec0->000000000f312fd8)
generation has finalizable objects (000000000f312ea0->000000000f312ec0)
generation has finalizable objects (000000000f2b4de0->000000000f312ea0)
Ready for finalization objects (000000000f312fd8->000000000f312fd8)
------------------------------
Heap
generation has finalizable objects (000000001165a780->000000001165a7e0)
generation has finalizable objects (000000001165a768->000000001165a780)
generation has finalizable objects (00000000115f9570->000000001165a768)
Ready for finalization objects (000000001165a7e0->000000001165a7e0)
------------------------------
Heap
generation has finalizable objects (00000000115a4c30->00000000115a4cc8)
generation has finalizable objects (00000000115a4be8->00000000115a4c30)
generation has finalizable objects (00000000115514c0->00000000115a4be8)
Ready for finalization objects (00000000115a4cc8->00000000115a4cc8)
------------------------------
Heap
generation has finalizable objects (000000000f36a9b8->000000000f36aa48)
generation has finalizable objects (000000000f36a948->000000000f36a9b8)
generation has finalizable objects (000000000f313b30->000000000f36a948)
Ready for finalization objects (000000000f36aa48->000000000f36aa48)
且这些对象大都是EF相关的。
MT Count TotalSize Class Name
000007fef694bb40 System.Reflection.Emit.DynamicResolver
000007fef68e76d0 System.WeakReference
000007fe987e9f40 System.Data.Entity.Core.EntityClient.EntityConnection
000007fe987d75f0 MySql.Data.MySqlClient.MySqlConnection
000007fe987e7d58 System.Data.Entity.Core.Objects.ObjectContext
000007fe98814690 System.Data.Entity.Internal.LazyInternalContext
3.如上来看,疑点还是在仓储这块。
跟踪堆栈,来看MySqlConnection的话,考虑XDbContext : IDisposable的销毁方式是不是不够直接彻底。


这里读的连接没有销毁,印证了上述推断,再让他们检查一下该服务中有没有正确使用该仓储即可。
是不是有点成就感...我是不是应该先去找个妹子、结束单身才是正事啊
高CPU、数据库无法读写的真凶的更多相关文章
- 高CPU、数据库无法读写
高CPU.数据库无法读写的真凶 有兴趣的同学可以参考如下系列文章,都是针对dump分析的实战和总结: Windbg DUMP分析(原创汇总) http://www.cnblogs.com/Love ...
- Mycat - 实现数据库的读写分离与高可用
前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...
- csla 与高cpu
在项目中一直使用csla 4.13. 项目一直正常,但是偶尔会出现iis占用的cpu 突然100%, 后面客户量大的情况,加入了缓存的机制.100%的情况出现的更多了. 当时有数据库死锁的原因.cpu ...
- NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel
NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...
- 如何轻松实现MySQL数据库的读写分离和负载均衡?
配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ...
- 使用SQL-Server分区表功能提高数据库的读写性能
首先祝大家新年快乐,身体健康,万事如意. 一般来说一个系统最先出现瓶颈的点很可能是数据库.比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大.海量的数据会严重影响数据库的读写 ...
- Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案
1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...
- 高版本->低版本迁移,低版本客户端连接高版本数据库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,若 ...
- 利用oneproxy部署mysql数据库的读写分离
实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...
随机推荐
- Excel基本操作1
Excel的基本操作之二,录入及快速填充.不足之处,欢迎补充
- eNSP自学入门(基础)
写了上篇博客之后,就立即投入到了eNSP的怀抱之中了,自己从零基础,入门到现在.也学了不少东西,在这里和大家分享一下. 说一下学习的过程吧,老师说做网络工程的课程设计用eNSP,关于这个软件什么都没有 ...
- Java学习记录第一章
学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...
- MongoDB大数据高并发读写性能测试报告
服务器大小: 单节点部署,磁盘1T,内存128G 并发导入规模: 1,多线程并发导入csv文件 2,csv文件分1万.10万.100万.200万行记录4种大小 3,每个csv对应一个collectio ...
- [原创]ssget过滤动态块的方式
Autocad在2006增加了新的动态块功能,方便了对块的动态修改,但是修改动态块后,块名会变成一个匿名块,导致无法通过块名来快速过滤. 明经论坛上有人通过全选块后再来遍历筛选,我通过研究简化了这个问 ...
- PHP 无限级分类(递归)
网上有很多,这是我自己做测试用的$arr = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name' ...
- R语言分析(一)-----基本语法
一, R语言所处理的工作层: 解释一下: 最下面的一层为数据源,往上是数据仓库层,往上是数据探索层,包括统计分析,统计查询,还有就是报告 再往上的三层,分别是数据挖掘,数据展现和数据决策. 由上图 ...
- 禁止LISTCTRL表头拖动
禁止ListCtrl表头拖动(Prevent CListCtrl column resizing) /*The header control in the ListView control sends ...
- Windows安装Mysql5.7.10绿色版
今天在Windows上安装Mysql的时候,去官网上下了一个最新版本的Mysql5.7.10绿色版,但是之前网上安装方式都过时了,比如会报一些常见的错误“[ERROR] Fatal error: Ca ...
- tomcat启动一闪而过问题的解决
1.今天使用startup.bat启动tomcat报错,现象是一闪而过,在logs文件夹中有没有日志文件, 可以在控制台输入startup.bat,如下: 但是也没有看出什么太有用的错误,然后可以 ...