当前位置: 首页 > news >正文

网站开发背景图片/百度搜索榜

网站开发背景图片,百度搜索榜,新网站如何被快速收录,跨境电商是不是诈骗本来第二篇早就该写的,都准备写一个while(true)导致高CPU的问题,但是那个dump不知道跑到哪里了,害得我这段时间一直在找,这次的现象是,哥正准备出去泡个茶,突然业务经理嗷嗷直叫(终于找到一个Bu…

本来第二篇早就该写的,都准备写一个while(true)导致高CPU的问题,但是那个dump不知道跑到哪里了,害得我这段时间一直在找,这次的现象是,哥正准备出去泡个茶,突然业务经理嗷嗷直叫(终于找到一个Bug,能不兴奋么),一边喊着处理不行了,一边喊着赶紧重新启动,哥没有吱声,默默打开了性能计数器,看到处理程序的缓存的确是慢慢在增长(这表示有积压了),而处理速度降到非常低了,几秒钟处理一个(平时情况下哥的程序每秒钟处理1000个Socket业务包是 没有问题的),说到这里建议大家在自己的程序中也加入一些自定义性能计数器,这东西太好用,当你把系统的一些值(比如说CPU的UserTime,还有Disk的DQL等)和你自己程序的一些值(比如说程序的缓存数,处理的并行进程数等)以文件方式记录下来的时候,做个Excel图表,这样你就能对整个系统的性能有了一个很直观的认识。

1. 首先对程序有个大概的了解。

内存1.2G,程序已经运行好几天了。

无标题

 

2. 既然是程序处理速度变慢,那么应该看看CPU,线程池的消耗情况等

看看线程如何:

第一个命令!runaway(如果你是Web程序,那么这个命令对你讲非常有用,但是这个From程序中,很多模块用了那种该死的While(true),基本上这个命令我们得不到什么东西)

无标题1

让我们看看线程池是什么样子吧(!tp这个命令可以看到线程池的情况):

无标题2

Wowowo…,看这个cpu很高啊。

3. 我们看看我们的处理线程在看什么吧(!thread能看到所有的线程)。

无标题3

。。。。。。

无标题4

哦,注意那个32号, GC Disabled,到这里我们大概猜测到是GC将处理线程阻塞掉了。

4.为了进一步验证我们的猜测,我们看看线程们到底在干什么吧(~*e !clrstack这个命令将打印所有线程栈,别着急,慢慢看,这个可以copy一下,贴到一个比较容易查看的编辑器里慢慢看)。为了看起来方便,我把打印结果copy出来用notepad++来看看,下面这个截图,我做过处理,不然太多了,看不过来的。

无标题5

 

5.我的处理函数是SchemeEntity.ProcessIMSIContext,并且开了十个线程处理(都是从线程池申请,最多同时允许十个线程处理,如果超过是个线程都没有处理完毕,那么分发线程将等待,新来的请求将在缓存队列中,就是上面所说的那个正在慢慢增长的的缓存),从这个可以看出,十个处理线程都在处理,那么我们看看他们都在干嘛,随机挑选两个37,38号看看吧。

clip_image016

clip_image018

6.哦,他们都在Monitor.Enter了,我们重点看一下32,切换过去吧(切换线程 ~线程号s)

clip_image020

7.哦哦~,看到了么,38,37都在等待,但是32在GC,我们看看32的堆栈吧,果然在GC。(kv显示非托管栈)

clip_image022

看看托管的吧(!clrstack),哦哦~List.set_Capacity(32) ,这几乎可以肯定是List在做copy的动作,List将申请自己现在长度的两倍的内存,应该是这个长度非常非常长,现有托管堆内存不大够,所以引起长时间的GC了。

clip_image024

8.我们直接去看看这行代码到底在干嘛吧,看到蓝色喷雾了吧,那个地方可以对应到代码的行数(我的截屏上只有D:\I 这个样子),屏幕太小了,我没法直接贴出来。但是上面显示是第64行。

clip_image026

我们可以看到iMsiDayCountDic是一个ConcurrentDictionary,但是用.Keys.Contains这个用法,额,我们可以想到, Key这个应该是一个ICollection,然后再上面调用Contains应该是新生成一个List<ulong>,然后把Dict里面的key全部copy到这个List<ulong>中,当Dict里面的数据非常多的时候,在生成List<ulong>的过程中,List<ulong>需要每次不断申请自身长度的2倍,于是慢慢就GC了,整个处理被阻塞了,其实Dict有另外的方法了

clip_image028

我们修改成这个样子,就OK了。

------------------------------------------------------------------------------------------------------------------------------------------

总结:

1. 对程序大概了解,知己知彼。

2. 看看是不是GC阻塞了线程(!thread这个命令看看GC有没有Disenable)。

3. 切换到被阻塞的线程看看栈,看看问题的代码。

4. 我们也能看的出,如果系统中有互斥资源(这些资源每次只能被一个线程所访问),那么通过提高线程数量来提高处理速度是有限的,特别是lock里的代码消耗了非常长的时间的时候。

 

(用live wirter写的,好像排版还是有些问题,我会努力改正,另外很多图片为了公司的保密,我不得不做了一些处理,如果不方便看的地方,请直接问我,我会详细给大家说清楚) 

转载于:https://www.cnblogs.com/StevenChennet/archive/2012/08/14/2638079.html

http://www.lbrq.cn/news/1065115.html

相关文章:

  • 网站开发建设方案的主要内容包括/百度seo霸屏软件
  • 做博彩的网站犯法吗/做网页多少钱一个页面
  • 南昌知名网站建设公司/爱站网关键词查询
  • 哪家建设网站好/站长工具查询系统
  • 镇江网站制作公司/seo教育培训机构
  • 中国十大知名网站建设/竞价专员是做什么的
  • 成都医疗seo整站优化/新冠咳嗽怎么办
  • wordpress 更改数据库密码错误/百度seo指数查询
  • 萧山网站建设那家好/免费做做网站
  • 鲜花网站模版/微信营销平台
  • 河北建设秦皇岛分公司/seo引擎优化软件
  • 信阳市两学一做网站/店铺推广方案怎么写
  • 新桥做网站/百度工具
  • 班级网站做哪些方面/seo舆情优化
  • 网站banner怎么做的/网络营销推广的方法有哪些
  • 旅游网站色彩搭配/北京网站优化外包
  • 沈阳建设电商网站/输入关键词进行搜索
  • 网站建设 开发/世界最新新闻
  • 删除wordpress用户组/网站优化入门免费教程
  • .net 网站开发教程/一个好的产品怎么推广
  • 手机百度网址是什么/什么是搜索引擎优化的核心
  • 做100个网站/苏州seo按天扣费
  • wordpress伪静态win/朝阳seo排名
  • 廊坊企业做网站/seo同行网站
  • 怎么设置网站名称/巨量算数数据分析
  • 容桂网站智能推广新闻/最新全国疫情实时大数据
  • 网站开发的进度控制计划表/泉州关键词搜索排名
  • 网络服务器设备/湖南seo推广
  • 灵宝网站制作工作室/百度竞价推广登陆
  • 网站设计与制作优点/企业网站开发
  • Jmeter进行性能并发测试
  • sqli-labs-master/Less-31~Less-40
  • vue3+vue-flow制作简单可拖拽可增删改流程图
  • 理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
  • 134页PPT华为项目管理之道PPT
  • 智慧社区(六)——社区居民人脸识别功能实现详解:从腾讯 API 集成到模拟验证