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

Posted Karllen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 线程占用CPU过高定位分析相关的知识,希望对你有一定的参考价值。

今天朋友问我一个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过高定位分析的主要内容,如果未能解决你的问题,请参考以下文章

分析定位占用CPU资源高的JVM线程

linux 分析进程占用CPU过高

Linux排查java程序占用cpu过高的线程代码

Java内存CPU占用率过高

排查linux下java应用cpu占用过高

生产环境CPU过高问题定位