广州.NET培训
达内广州.NET培训中心

18087159764

热门课程

去.net培训上课,大神教你CPU抛锚绝招【达内培训】

  • 时间:2017-08-17
  • 发布:it
  • 来源:博客园

为什么大学毕业生选择去.net培训上课呢?首先你在学校学的技能不深入,而且到了专业的机构,还有多年经验的大神带路,今天达内.net培训的大神就带你轻松搞定CPU抛锚的大绝招,当一个.net应用在生产环境CPU突然居高不下,如何快速准确的定位问题所在,并且对实时业务影响最小化?如何不抓Dump也不用live debug就可以知道你的应用在做什么?如何确认你的应用是由于哪个线程的执行造成的CPU升高,该线程正在执行什么代码?

CPU升高的原因有哪些?

1、有时候应用的负载大了,CPU自然会受业务请求的增加和增高;

2、有时候因为GC回收使用了过高的CPU资源;

3、有时候是某个线程执行的代码在某种情况下陷入了死循环;

4、有时候是因为锁争用太激烈,某资源上的锁释放后,等待的线程去抢锁引起的;

5、有时候是因为线程太多,上下文切换太频繁引起的。

6、每秒抛出太多的Exception。

广州达内.net培训大神带路了!

1、我们一般会用一些计数器来观察实际的应用的负载情况和并发请求量,比如每秒接受多少请求等,所以业务量增大引起的CPU高,很容易确定。

2、GC使用的CPU百分比有专门的计数器,一看便知。

3、如果某段代码陷入了死循环引起的CPU高,只抓Dump看e!clrstack和!runaway还是不太好定位问题,

4、锁争用也有相关的.NET计数器可以直接看。

5、每个进程的线程数,每秒上下文切换次数也可以有直接的计数器可看。

6、每秒抛出的异常也有直接的计数器可看。

达内培训大神的思路:

从上面看到也就是第3种地排查比较费劲,而且抓DUMP有时候容易把服务抓S,如果是一个有状态的服务,抓死服务后果很严重,所以我们得想出一种更轻量级的方法去获取服务的每个线程的调用栈。

其实CLR本身有一些用于支持调试的接口,都是Com的,但.NET对此有一些包装,可以用c#来使用这些调试API,其中当然包括附加到进程,获取所有线程调用栈的功能。该DLL在.net sdk里,叫MdbgCore.dll。

有了以上几个知识点,我们就可以综合起来写一个比较智能化定位高CPU问题的工具。

学.net培训、软件开发、游戏开发、编程技术可到广州达内参加试听课程,这里有重量级的导师等您哦!

扫码加入超值7天试听课程!

达内it培训

上一篇:达内培训:亚马逊开拓零售市场!
下一篇:软件开发必学之.net Core 2.0技术【广州达内】

这些.net工具你都认识吗

广州达内.Net培训面试中常见问题

达内.net培训:共享充电宝的坎坷之路

.Net和Java培训哪个更好就业?

选择城市和中心
贵州省

广西省

海南省