Linux 线程占用CPU过高定位分析

今天朋友问我一个Linux程序CPU占用涨停了,该如何分析,

CPU占用过高,模拟CPU占用过高的情况

先上一段代码:

 1 #include 
 2 #include 
 3 #include 
 4 
 5 
 6 int main(int argc, char **argv) {
 7   
 8     std::vector test_threads;
 9     for(int i = 0; i < 9; i++){
10       test_threads.push_back(std::thread([]{
11     while(1){
12       std::this_thread::sleep_for(std::chrono::milliseconds(500));
13     }
14       }));
15     }
16     test_threads.push_back(std::thread([]{
17       while(1){
18       std::cout<<"cpu"<<std::endl;
19       }
20     }));
21     
22     for(auto &x : test_threads){
23       x.join();
24     }
25     
26     return 0;
27 }

第10个线程中没有进行睡眠,会独占进程的时间片,导致CPU利用率过高,

现在就要定位到第10个

第一步:top 查看程序进程id

Linux 线程占用CPU过高定位分析_第1张图片

 

第二步:top -H -p 96263 定位CPU占用过高的线程id

Linux 线程占用CPU过高定位分析_第2张图片

 

第三步:使用pstack 96263或者strace -f -p 96263 定位线程堆栈

strace -f -p 96263

 Linux 线程占用CPU过高定位分析_第3张图片

 

转载于:https://www.cnblogs.com/Forever-Kenlen-Ja/p/8618102.html

你可能感兴趣的:(Linux 线程占用CPU过高定位分析)