CLR垃圾回收导致高CPU占用率

 

最近刚看完《CLR Via C#》,正好碰上了一个关于垃圾回收的问题:
 
环境:
AMD Dual-core Processor x 4
Windows2003 Server SP2
IIS 6.0
 
现象:
当系统中某个高优先级的线程(基本优先级是13)100%占用一个核之后,所有其他7个核都被w3wp占用,CPU的使用率都是100%。
 
分析:
在高CPU情况下对w3wp做了个dump,从dump中看出所有线程都在进行垃圾回收。结合《CLR Via C#》中关于GC的介绍,有如下几点值得注意:
1. CLR的GC有两种工作模式:workstation和server模式。两种模式的切换可以通过如下链接的方法改动:
2. 在服务器上的IIS缺省工作在server模式下。这种模式会为每个CPU的核分配一个GC线程,从而让每个线程的GC行为表现一致。
3. GC线程工作在正常优先级上(通常是8)。
 
原因:
当某个GC线程抢不到CPU的时候,CLR会认为系统资源紧张(尽管这不是实际情况),然后让所有的GC线程开始工作,这样所有的CPU资源就被完全占用。
 
解决方案:
把IIS改成workstation模式。
 
备注:
在问题的调研过程中,我发现很多人都碰到过这种现象,而原因大部分都是和逻辑相关,也就是确实系统做了很多和内存相关的操作,从而使用了大量的CPU。而我的问题发生时系统什么都没有做,那个导致问题的高优先级线程就是一个死循环,和w3wp无任何交互。另外通过和微软的技术支持联系,他们说他们也是第一次碰到我的这种情况。所以我希望这里几下这个线索,希望对大家有所帮助。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值