本来第二篇早就该写的,都准备写一个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将处理线程阻塞掉了。