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

摘要:
今天,我的朋友问我如何分析Linux程序CPU使用率的上升和下降。CPU使用率过高。为了模拟CPU过度使用的情况,我首先编写了以下代码:1#include<iostream>2#include<thread>3#include<vector>456 intmain(intargc,char**argv){78std::vector<std::thread>test_threads;9 for(int=0;I<9;I++)

今天朋友问我一个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

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张

免责声明:文章转载自《Linux 线程占用CPU过高定位分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF通过DynamicResource实现给界面动态更换皮肤神奇的Timer之lock篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux fstab下挂载错误导致cannot open access to console, the root account is locked的问题

用 deepin 安装 u 盘启动,出现选择安装语言的界面时,按 ctrl+alt+T,进入 tty,然后输入 startx,进入 live cd 模式,挂载硬盘的根分区,然后修改 /etc/fstab 文件,把里面的 /home 分区里的启动项注释掉。mount 命令在开始时会读取这个文件,确定设备和分区的挂载选项,注释掉后开机就不会挂载 /home...

Handler 机制(一)—— Handler的实现流程

   由于Android采用的是单线程模式,开发者无法在子线程中更新 UI,所以系统给我提供了 Handler 这个类来实现 UI 更新问题。本贴主要说明 Handler 的工作流程。 1. Handler 的作用 在Android为了保障线程安全,规定只能由主线程来更新UI信息。而在实际开发中,会经常遇到多个子线程都去操作UI信息的情况,那么就会导致U...

Debian下编译安装MPlayer

Debian下编译安装MPlayer MPlayer是Linux下一款优秀的媒体播放软件,然而在我的Debian系统下却一直没有用起来。说起其中的原因,一是因为如果使用Apt来查找安装,那么所安装上的是非GUI下的MPlayer程序,其实要论起来,这样的程序也是一样可以播放媒体文件,然而就个人的使用来看,如果只是播放一些MP3文件,那么还是相当不错的,...

linux上systemctl使用

转载:https://www.cnblogs.com/zdz8207/p/linux-systemctl.html Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了。 摘要: systemctl 是系统服务管理器命令,它实际上...

linux下安装rabbitmq 集群

1.下载erlang官网地址 http://www.erlang.org/download 挑选合适的版本 然后 wget 比如目前18.3运行命令 wget http://erlang.org/download/otp_src_18.3.tar.gz 2.使用yum安装下必须的配件:  yum install gcc glibc-devel make n...

sqlserver 性能调优脚本

-- 查看日志空间占用率DBCC SQLPERF ( LOGSPACE) SELECT TOP 10 st.text AS SQL_Full --父级完整语句 ,SUBSTRING(st.text, (qs.statement_start_of...