Linux Cpu占用高调试方法

转载 2016年06月01日 08:56:42

1.首先是用top命令确定 有问题的pid

然后用top -H -p pid命令查看进程内各个线程占用的CPU百分比
>top -H -p 14094

or

或者使用  > ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx


2.接下来,我们用gdb来attach目标进程

gdb
gdb>attach 2907

在gdb中,列出线程状态:

(gdb) info threads   
9 Thread 47056948181264 (LWP 11066)  0x00002acc4a3dec91 in nanosleep () from /lib/libc.so.6   
8 Thread 47056956573968 (LWP 11067)  0x00002acc4a406fc2 in select () from /lib/libc.so.6   
7 Thread 47056964966672 (LWP 11068)  0x00002acc4a3dec91 in nanosleep () from /lib/libc.so.6  
 6 Thread 47056973359376 (LWP 11069)  0x00002acc4a3dec91 in nanosleep () from /lib/libc.so.6   
5 Thread 47056981752080 (LWP 11070)  0x00002acc4a3dec91 in nanosleep () from /lib/libc.so.6   
4 Thread 47056990144784 (LWP 11071)  0x00002acc4a40e63c in recvfrom () from /lib/libc.so.6   
3 Thread 47057194060048 (LWP 11072)  0x00002acc4a406fc2 in select () from /lib/libc.so.6   
2 Thread 47057226893584 (LWP 11073)  CSendFile::SendFile (this=0x2acc5d4aff40, pathname=@0x2acc5d4afee0    at ../src/csendfile.cpp:101   
1 Thread 47056939784832 (LWP 11065)  0x00002acc4a3dec91 in nanosleep () from /lib/libc.so.6 (gdb) 


gdb已经列出了各线程正在执行的函数,我们需要更多信息,记住11073对应的行首标号,这是gdb为线程分配的id,这里为2,然后执行切换:

(gdb) thread 2 
[Switching to thread 2 (Thread 47057226893584 (LWP 11073))]#0  CSendFile::SendFile (this=0x2acc5d4aff40, pathname=@0x2acc5d4afee0    at ../src/csendfile.cpp:101 101             while(1
(gdb) 

bt一下:

(gdb) bt 
#0  CSendFile::SendFile (this=0x2acc5d4aff40, pathname=@0x2acc5d4afee0) at ../src/csendfile.cpp:101 
#1  0x000000000040592e in CIcdn::TaskThread (pParam=0x7fff617eafe0) at ../src/cicdn.cpp:128 
#2  0x00002acc4a90b73a in start_thread () from /lib/libpthread.so.0 
#3  0x00002acc4a40d6dd in clone () from /lib/libc.so.6 
#4  0x0000000000000000 in ?? ()


来看一下101行的代码:

(gdb) l 
96      } 
97 
98      int CSendFile::SendFile(const string& pathname) 
99      {
100             int n;
101             while(1)
102             {
103                     n++;
104             }
105             //read file and send 

现在我们定位到了出问题的代码位置,这里的循环只用来演示的。 
最后别忘了detach()

调试完指定进程后,可以运行detach命令来让GDB释放该进程,该进程得以继续运行。当回车时,detach不会重复。当执行完detach后,进程和GDB不再相关,GDB可以attach其他进程。


2. 使用 pstack

1.安装pstack

yum install pstack

使用方式:

>pstack pid 根据pid找出有问题的线程

>strace -p pid //这个线程所有系统调用


linux问题排查 - 高cpu占用率的进程和线程

1.简介           一个程序,完成它预设的功能,并不能说明它是一个优良的程序。好的程序,应该是对资源的合理利用,亦或是 用更少的资源(使用合理的算法),实现更多有效的产出。       影响...
  • hrn1216
  • hrn1216
  • 2016年05月16日 17:31
  • 34633

JAVA Linux 排查CPU 过高的方法

线上网站访问某个页面总是出现CPU饱和状态,基本就是100%的使用率,如何排查CPU过高的问题...
  • zhanglh046
  • zhanglh046
  • 2015年12月31日 19:53
  • 1055

Linux 系统 CPU 占用率较高问题排查思路

CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CPU负载 使用 vmstat 查看系统纬度的 CPU 负载: 可以通过 vmstat 从系统维...
  • lufeisan
  • lufeisan
  • 2016年11月13日 19:51
  • 8605

Linux服务器定位CPU高占用率代码位置经历

最近检查服务器,突然发现有一台的CPU占用率非常高。特此记录定位异常代码的步骤: 1. 使用top命令定位异常进程。可以看见12836的CPU和内存占用率都非常高 2. 使用top -H -p 进程...
  • zhu19774279
  • zhu19774279
  • 2016年05月03日 11:24
  • 4071

Linux主机下 java项目CPU占用过高分析

测试童鞋反应项目在服务器上运行时CPU占用过高,如下(top) 查看方法如下: 1. 通过top命令定位到 7777 进程(pid) 2. 定位线程号  显示线程列表: ps -mp pid ...
  • yugongkai
  • yugongkai
  • 2016年10月28日 16:19
  • 2351

(一)JAVA CPU占用过高问题排查(linux)

JAVA CPU占用过高问题排查(linux) 最近发现有一个服务在服务器上无响应,到服务器上一看,好家伙,java进程CPU一直100%以上 简单记录下我对这个问题的跟踪 首先当然要看...
  • whupanyinghua
  • whupanyinghua
  • 2016年06月12日 23:47
  • 4275

Linux 释放cpu&gpu内存、显存和硬盘

free -mfree -m total used free shared buff/cache available Mem: ...
  • jiandanjinxin
  • jiandanjinxin
  • 2016年07月18日 11:49
  • 3584

Linux资源控制-CPU和内存

主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法。   CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的....
  • wdsfup
  • wdsfup
  • 2015年12月08日 16:57
  • 1060

[Linux小技巧] 一行命令让CPU占用率达到100%

for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & ...
  • robertsong2004
  • robertsong2004
  • 2014年07月04日 12:55
  • 19919

linux cpu 使用率比较高问题调试

问题分析: cpu使用率比较高一般归结于相关进程的线程使用率比较高,常出现的情况是大致可能是因为某个线程可能陷入死循环或者现场内有比较耗cpu的操作(memcpy 等等), 解决cpu高的问题就是定位...
  • superwander
  • superwander
  • 2015年02月28日 10:13
  • 1101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux Cpu占用高调试方法
举报原因:
原因补充:

(最多只允许输入30个字)