码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-21 17:31:48      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:char   font   color   一个   []   代码   sleep   test   线程id   

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

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

先上一段代码:

 1 #include <iostream>
 2 #include <thread>
 3 #include <vector>
 4 
 5 
 6 int main(int argc, char **argv) {
 7   
 8     std::vector<std::thread> 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

技术分享图片

 

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

技术分享图片

 

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

strace -f -p 96263

 技术分享图片

 

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

标签:char   font   color   一个   []   代码   sleep   test   线程id   

原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/8618102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!