- 论坛徽章:
- 0
|
有一个程序因手误,引入了一个bug,这个bug还比较隐蔽,表现为程序上线的前几天运行良好,响应速度非常快,延时处于1ms级别,但是运行了一个星期以后,处理延时达到了400ms级别。ssh上去看了系统内存cpu使用率都正常,于是查看对应的服务进程,发现其cpu使用率达到20%。再ps 命令和top命令定位到高cpu消耗的线程上。pstack发现线程一直处于sem_wait函数调用上。查看代码是因为sem_wait赋的时间有问题,- while (1)
- {
- gettimeofday(&daytime...
- to_wait.tv_sec = daytime.tv_sec;
- to_wait.tv_nsec = daytime.tv_usec * 1000;
- ret = sem_timedwait(&sem_disconnect, &to_wait...
- }
复制代码 也就是说这个线程一直在循环sem_wait。这个线程是负责网络重连的,一旦断连了它就会不断尝试重连对端,它不负责业务。按道理说它消耗多少cpu不应该影响业务。但实际上随着运行时间的增长,它对业务线程的影响越来越大,这是为什么呢????? |
|