首页 新闻 会员 周边 捐助

Windbg解决CPU碰到的问题

0
悬赏园豆:50 [已解决问题] 解决于 2014-05-23 16:04

网站放上服务器一段时间后,占用CPU会非常高,导致网站访问速度变得非常缓慢。在网站变慢时抓取了几次dump之后,发现线程47占用CPU时间非常厉害。输入如下命令,得到如下内容

0:083> ~47k
Child-SP          RetAddr           Call Site
00000000`08eceb40 000007fe`f12823af mscorwks!SVR::gc_heap::relocate_survivors_in_plug+0x3c
00000000`08ecebd0 000007fe`f12824f6 mscorwks!SVR::gc_heap::relocate_survivors_in_brick+0x3f
00000000`08ecec00 000007fe`f1279974 mscorwks!SVR::gc_heap::relocate_survivors+0x106
00000000`08ecec60 000007fe`f18842df mscorwks!SVR::gc_heap::relocate_phase+0xc4
00000000`08ecece0 000007fe`f132337d mscorwks!SVR::gc_heap::plan_phase+0x9ff
00000000`08ecee40 000007fe`f1886d85 mscorwks!SVR::gc_heap::gc1+0x6d
00000000`08eceea0 000007fe`f18e9acf mscorwks!SVR::gc_heap::garbage_collect+0x2f5
00000000`08ecef10 000007fe`f1343553 mscorwks!SVR::gc_heap::gc_thread_function+0x7f
00000000`08ecef70 00000000`7751652d mscorwks!SVR::gc_heap::gc_thread_stub+0x93
00000000`08ecf9c0 00000000`7764c541 kernel32!BaseThreadInitThunk+0xd
00000000`08ecf9f0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d

上面的确是GC问题,但是不知道下一步该怎么定位到代码了。有多个GC线程都在疯狂使用CPU,程序Virtual bytes 8G左右,但是实际的内存是1G多。服务器是24G内存,就算真的占用了这么多,也不至于变慢啊。

  再来一个,好多线程都在

0:047> ~83s
ntdll!ZwWaitForSingleObject+0xa:
00000000`776712fa c3              ret
0:083> ~84s
ntdll!ZwWaitForSingleObject+0xa:
00000000`776712fa c3              ret

问题已解决,分配大对象引起GC关闭,感谢各位!
逆心的主页 逆心 | 初学一级 | 园豆:160
提问于:2014-05-22 10:50
< >
分享
最佳答案
0

在做垃圾回收,如果垃圾回收占用时间较多的话,可能原因包括,大对象较多,被回收的对象释放非托管资源缓慢,内存泄漏。

收获园豆:35
Launcher | 高人七级 |园豆:45050 | 2014-05-22 15:59

大对象不多,超过0.5M的就3个,请教下下一步应该怎么定位问题,现在只知道是GC频繁引起的CPU占用飙升。

逆心 | 园豆:160 (初学一级) | 2014-05-22 16:02

什么命令能够查看是那个托管代码引起线程47的CPU占用呢?万分感谢!

逆心 | 园豆:160 (初学一级) | 2014-05-22 16:03
Launcher | 园豆:45050 (高人七级) | 2014-05-22 16:26
其他回答(1)
0

看不懂如果是CPU间歇性变高,那一般是GC在回收了

收获园豆:15
吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-22 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册