ranmengxu 发表于 2010-06-09 21:07

进程占用CPU过高问题探讨,求帮助

问题描述:
某个进程占用CPU达到120%,一般发生在运行一天后,进程处理数据量最高峰时期,进程处理数据为电话通话量数据,一天的早上,中午,下班时间为高峰。进程占CPU过高基本出现在早上8点左右。
1、硬件环境:
操作系统:Linux localhost.localdomain 2.6.18-53.el5xen #1 SMP Wed Oct 10 16:48:44 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
资源情况:(TOP命令显示)
top - 20:48:26 up 70 days, 22:00,5 users,load average: 0.57, 0.68, 0.82
Tasks: 156 total,   3 running, 153 sleeping,   0 stopped,   0 zombie
Cpu(s):3.7%us,2.9%sy,0.0%ni, 90.4%id,0.0%wa,0.3%hi,2.5%si,0.2%st
Mem:16390144k total,4312480k used, 12077664k free,   604720k buffers
Swap: 51199144k total,      0k used, 51199144k free,1815696k cached

2、软件描述
程序用C++实现,分为主程序和子模块,子模块以动态库方法被主程序加载,主程序负责接收远程数据包(多个点)和发送远程数据包(多个点),主程序和子模块的交互为队列交互方式,子模块被加载起来后,单独以线程方式运行,主程序发送数据给子模块时把数据压入子模块队列,子模块需要外发数据时把数据压入相关队列,主程序负责发送。各队列加锁同步。基本排除了子模块自身处理速度不够的情况。

进程占用CPU过高后,导致自身来源数据队列堵塞,可达到1000万条数据堵塞。

ranmengxu 发表于 2010-06-09 21:08

早上出问题后,重启程序,CPU就降下来了,如果是自身无法处理高峰数据量,此时仍然会CPU过高才对。

accessory 发表于 2010-06-09 23:37

是跑在XEN上面的啊?一定要用XEN么?不能用普通的KERNEL?

当看目前的描述看不出来啥。如果可以的话,加个OPROFILE,看看具体哪里慢了或者堵塞了。如果不能直接在客户那边加OPROFILE,就自己搭个小环境,想办法重现问题。

其实这个应该是事先测试好的。。。。。

EricFisher 发表于 2010-06-10 08:59

120% ?
页: [1]
查看完整版本: 进程占用CPU过高问题探讨,求帮助