关闭

捉虫记(二)GC导致的hang

发表于:2012-8-16 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:StevenChennet    来源:51Testing软件测试网采编

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

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

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

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

  看看线程如何:

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

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

  Wowowo…,看这个cpu很高啊。

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

  ......

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

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号