linux下线程不需要死循环么,如何定位死循环或高CPU使用率(linux)

如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象

找出线程 对CPU使用率过高的进程的所有线程进行排序

ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx得到如下结果,其中线程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907 2909 7.8 ./xxx也可以通过查看/proc中的信息来确定高CPU线程. 打印了4列,线程ID,线程名,用户时间和内核时间(排名未分先后) awk '{print $1,$2,$14,$15}' /proc/2907/task/*/stat 找出调用栈 使用gdb attach nmsagent所在的进程,在gdb中使用 info threads显示所有线程

gdb gdb>attach 2907 gdb>info threads 得到如下结果,可以发现2909线程的编号是12

13 Thread 0xad5f2b70 (LWP 2908)  0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1   12 Thread 0xad58eb70 (LWP 2909)  0x006e0422 in __kernel_vsyscall ()   11 Thread 0xad52ab70 (LWP 2910)  0x006e0422 in __kernel_vsyscall ()   10 Thread 0xad4f8b70 (LWP 2911)  0x006e0422 in __kernel_vsyscall ()   9 Thread 0xad4c6b70 (LWP 2912)  0x006e0422 in __kernel_vsyscall ()   8 Thread 0xad3feb70 (LWP 2913)  0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1   7 Thread 0xace08b70 (LWP 2914)  0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1   6 Thread 0xac607b70 (LWP 2915)  0x006e0422 in __kernel_vsyscall ()   5 Thread 0xac5e6b70 (LWP 2916)  0x006e0422 in __kernel_vsyscall ()   4 Thread 0xac361b70 (LWP 2917)  0x006e0422 in __kernel_vsyscall ()   3 Thread 0xac2fdb70 (LWP 2918)  0x006e0422 in __kernel_vsyscall ()   2 Thread 0xac1fcb70 (LWP 2919)  0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1 * 1 Thread 0xb78496d0 (LWP 2907)  0x006e0422 in __kernel_vsyscall () 使用thread 切换线程,使用bt显示线程栈

gdb>thread 12 gdb>bt 得到如下线程栈

#0  0x006e0422 in __kernel_vsyscall () #1  0x001cca26 in nanosleep () from /lib/tls/i686/cmov/libc.so.6 #2  0x001fc2dc in usleep () from /lib/tls/i686/cmov/libc.so.6 #3  0x0806b510 in OspTaskDelay () #4  0x0805c710 in CDispatchTask::NodeMsgSendToSock() () #5  0x0805cc74 in DispatchTaskEntry () #6  0x0806a8e9 in OspTaskTemplateFunc(void*) () #7  0x00d4780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0  #8  0x002027ee in clone () from /lib/tls/i686/cmov/libc.so.6  ps + strace 得到进程ID 21465

ps -e |grep cmu  4996 ?        00:00:25 cmu_fjga_sp3 21465 pts/5    00:08:10 cmu 得到线程时间, 其中最占CPU的是 EpollRecvTask 21581

ps -eL |grep 21465 21465 21579 pts/5 00:00:00 CamApp 21465 21580 pts/5 00:00:00 TimerMan Task 21465 21581 pts/5 00:09:02 EpollRecvTask 21465 21582 pts/5 00:00:00 使用 strace -p 21581 得到线程栈

嵌入式 如何定位死循环或高CPU使用率(linux) 及性能优化

嵌入式 如何定位死循环或高CPU使用率(linux) ln -s /mnt/nfs/_install/usr/bin/sort /usr/bin/sort awk '{print $1,$2,$14, ...

嵌入式 如何定位死循环或高CPU使用率(linux)

如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...

制造高CPU使用率的简单方法

在群里有人问制造CPU占用率高的场景用来做测试.所谓做好事难,干“坏”事还不容易?这个需求有很多方法可以实现,比如使用一些压力测试工具.我首先想 到的是HASH JOIN.这个联接比较消耗CPU资源, ...

[Java] HashMap 导致的高 CPU 使用率

今天在生产环境遇到一个问题,Java 应用程序的 cpu 使用比例很高,导致整台机器的 cpu 使用率高达 90% ,正常情况下是 20% 左右. 把 Thread dump 导出来,利用 IBM T ...

笔记整理:计算CPU使用率 ----linux 环境编程 从应用到内核

linux 提供time命令统计进程在用户态和内核态消耗的CPU时间: [root@localhost ~]# time sleep real 0m2.001s user 0m0.001s sys 0 ...

Linux性能优化从入门到实战:04 CPU篇:CPU使用率

CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00 ...

06 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?

上一节我讲了 CPU 使用率是什么,并通过一个案例教你使用 top.vmstat.pidstat 等工具,排查高 CPU 使用率的进程,然后再使用 perf top 工具,定位应用内部函数的问题.不过 ...

Linux:CPU使用率100%排查方法

Linux作为一个多任务操作系统,将每个CPU的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉. CPU使用率 Linux作为一个多任务操作系统,将每个CPU ...

由Java正则表达式的灾难性回溯引发的高CPU异常:java.util.regex.Pattern$Loop.match

问题与分析 某天领导report了一个问题:线上的CPU自从上一个版本迭代后就一直处于居高不下的状况,领导看着这段时间的曲线图判断是有两条线程在不停的死循环. 接到任务后去查看了AWS的CloudWa ...

随机推荐

如何编写Vault插件扩展Vault Explorer的功能

今天练习了一下Vault Explorer的扩展程序,基本上是Vault SDK中的HelloWord示例程序.如果你刚刚开始接触Vault的二次开发,希望对你有帮助. 开始之前,你需要安装Vault ...

How to debug windows service

Step 1. Add the following code in what you want to debug. System.Diagnostics.Debugger.Launch(); Step ...

C语言中如何将二维数组作为函数的参数传递

今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

实现Linux select IO复用C/S服务器代码

已在ubuntu 下验证可用 服务器端 #include#include#include#include& ...

C#-datagridview右键选中行

在datagridview中有时需要在右键点击某行的时候就选中它,那么我们只需要在datagridview的CellMonseDown事件中添加如下代码就行: && e.ColumnI ...

HTML5新增的一些属性和功能之八——web Worker

Web Workers 为什么用web workers? 浏览器的原理中决定了页面打开只有一个主线程--UI渲染线程,如果线程中有耗时的程序(js)会阻塞线程,使得页面中其他的UI无法渲染,我们一般把 ...

Mac OS X于Android Kernel下载方法

于上一篇日志中,我总结了大家提供的下载Android源代码的方法.这里再简单总结一下内核的下载方法. 參考这里的介绍:http://source.android.com/source/building ...

对于新版本的webstorm对vue的支持

webstorm 对于官方vue的支持,直到2017.1,这个版本,之后的版本不能直接安装vue插件,这时候就需要自己手动新建vue模板了

springAop 使用@Around,@After等注解时,代码运行两边的问题

springAop使用@Around,@After等注解时,代码运行两边的问题 将@Component注解删掉就好了

SpringBoot入门篇--使用Thymeleaf模板引擎进行页面的渲染

在做WEB开发的时候,我们不可避免的就是在前端页面之间进行跳转,中间进行数据的查询等等操作.我们在使用SpringBoot之前包括我在内其实大部分都是用的是JSP页面,可以说使用的已经很熟悉.但是我们 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值