如何定位死循环或高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)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. .netcore利用perf分析高cpu使用率

    目录 一 在宿主机运行perf 二 容器内安装perf 1,重新构建镜像 2,下载火焰图生成脚本 3,安装linux-perf 三 CPU占用分析 1,perf record捕获进程 2,生成火焰图 ...

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

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

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

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

  9. 4 系统的 CPU 使用率很高,但为啥却找不到高 CPU的应用?

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

随机推荐

  1. [Mongodb] Relica Set复制集集群简单搭建--持续更新

    这里我们搭建一个没有访问控制,奇数个Set没有仲裁者的集群 1.三个配置文件添加 replication.replSetName:"Replica_test" 并启动三个实例2.连 ...

  2. JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址

    在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path = getServletContext().getRealP ...

  3. js生成GUID

    //表示全局唯一标识符 (GUID). function Guid(g) { var arr = new Array(); //存放32位数值的数组 if (typeof(g) == "st ...

  4. "\r\n","\r","\n"

    参考: http://blog.csdn.net/xiaofei2010/article/details/8458605 '\r' : 回车符 '\n' : 换行符 以下是c++语言的测试代码, 跟平 ...

  5. css的简写规范

    css简写有这么几个好处,第一个也是最大的好处就是减少了代码的数量.第二个就是方便自己的编写吧. 下面来介绍几个常见的css属性简写规则. 一.字体(font) font-style:设置字体的样式. ...

  6. android 自定义View onMeasure中 super.onMeasure 和 setMeasuredDimension

    练习写一个自定义的view,代码是抄网上的,第一次写,没有问题,与网上的示例一样的效果, 第二次.第三次,都出现问题,但是解决了. 昨天进行第四次写再写,又出问题不一样的问题了. 首先是想加一个子包, ...

  7. Centos6.4 aria2 webui-aria2

    wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm rpm -ivh ...

  8. 读取数据库的表并绑定到Listview

    $aResultEventlog = _GetQueryTable($strSQL_Compare_FailRecordEventIDs, $iRowsEventlog, $iColsEventlog ...

  9. Spring对 JDBC 的支持,JdbcTemplate类的使用

    导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包; 在src目录下建立jdbc.properties文件:存放连接数据库的属性值 jdbc.user=root j ...

  10. jquery操作复选框(checkbox)的12个小技巧总结

    1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...