Strace诊断CPU跑高问题_MindChange的博客-CSDN博客


本站和网页 https://blog.csdn.net/linzx0403/article/details/49364513 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Strace诊断CPU跑高问题_MindChange的博客-CSDN博客
Strace诊断CPU跑高问题
MindChange
于 2015-10-23 17:58:06 发布
4895
收藏
分类专栏:
linux c
linux c
专栏收录该内容
6 篇文章
0 订阅
订阅专栏
手把手教你用Strace诊断问题
发表于
2015-10-16
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。
如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:
top
技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序。
在本例中大家很容易发现 CPU 主要是被若干个 PHP 进程占用了,同时 PHP 进程占用的比较多的内存,不过系统内存尚有结余,SWAP 也不严重,这并不是问题主因。
不过在 CPU 列表中能看到 CPU 主要消耗在内核态「sy」,而不是用户态「us」,和我们的经验不符。Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调用跟踪用「strace」,用户态的函数调用跟踪用「ltrace」,所以这里我们应该用「strace」:
shell> strace -p <PID>
不过如果直接用 strace 跟踪某个进程的话,那么等待你的往往是满屏翻滚的字符,想从这里看出问题的症结并不是一件容易的事情,好在 strace  可以按操作汇总时间:
shell> strace -cp <PID>
通过「c」选项用来汇总各个操作的总耗时,运行后的结果大概如下图所示:
strace -cp
很明显,我们能看到 CPU 主要被 clone 操作消耗了,还可以单独跟踪一下 clone:
shell> strace -T -e clone -p <PID>
通过「T」选项可以获取操作实际消耗的时间,通过「e」选项可以跟踪某个操作:
strace -T -e clone -p
很明显,一个 clone 操作需要几百毫秒,至于 clone 的含义,参考 man 文档:
clone() creates a new process, in a manner similar to fork(2). It is actually a library function layered on top of the underlying clone() system call, hereinafter referred to as sys_clone. A description of sys_clone is given towards the end of this page.
Unlike fork(2), these calls allow the child process to share parts of its execution context with the calling process, such as the memory space, the table of file descriptors, and the table of signal handlers. (Note that on this manual page, “calling process” normally corresponds to “parent process”. But see the description of CLONE_PARENT below.)
简单来说,就是创建一个新进程。那么在 PHP 里什么时候会出现此类系统调用呢?查询业务代码看到了 exec 函数,通过如下命令验证它确实会导致 clone 系统调用:
shell> strace -eclone php -r 'exec("ls");'
最后再考大家一个题:如果我们用 strace 跟踪一个进程,输出结果很少,是不是说明进程很空闲?其实试试 ltrace,可能会发现别有洞天。记住有内核态和用户态之分。
MindChange
关注
关注
点赞
收藏
评论
Strace诊断CPU跑高问题
手把手教你用Strace诊断问题发表于2015-10-16早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。
复制链接
扫一扫
专栏目录
一次服务器CPU占用率高的定位分析
weixin_33704234的博客
08-22
150
背景:通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的。幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有对服务造成影响。随着上次我们找到那个吃IO的罪犯,这次我们要追捕的是潜伏在团体中的特务,更加惊险刺激哟!系统环境用top命令很容易定位到是谁占用CPU最高。以我们的这个业务进程(imDevServer...
手把手教你用 Strace 诊断问题 | 运维技巧
一亩三分地
10-19
2104
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。
如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果
评论 1
您还未登录,请先
登录
后发表或查看评论
php cpu偏高,strace 分析 phpfpm CPU偏高
weixin_39758288的博客
04-10
164
阿里 centos,php7strace分析php-fpm 发现每一步时间都偏长框架不同,一个Yii一个Tp5,是框架问题么?问题机器,cpu偏高,单个phpfpm进程达5%11:03:44.762257 poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}]) <0.000041>11:03:44.76...
linux进阶53——strace排查cpu占用率的问题
www_dong的博客
09-28
457
(1)查看某一进程所有的系统调用并输出到文件中
strace -o /home/output.txt -T -tt -e trace=all -p 进程id
(2)查看某个进程中最耗时的线程
步骤1: ps --efL | grep 进程名 | grep -v grep
步骤2: gdb attach 线程号
步骤3: bt
(3)查看某一进程cpu占用比较高的线程
1) top -H -p 进程id ----------查看耗时的线程
2) strace -o /home/outp
linux strace cpu,如何定位死循环或高CPU使用率(linux)
weixin_42364174的博客
05-12
220
如何定位死循环或高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 ./xxx2907 2909 7.8 ./xxx也可以通过查看/pr...
linux cpu高 strace,Strace诊断CPU跑高问题
weixin_39740272的博客
05-13
276
如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果: top技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序。在本例中大家很容易发现 CPU 主要是被若干个 PHP 进程占用了,同时 PHP 进程占用的比较多的内存,不过系统内存尚有结余,SWAP 也不严重,这并不是问题主因。不过在 CPU 列表中能看到 CPU 主要消耗在内核态「sy...
Linux性能测试 strace命令
flyingqr的专栏
04-24
1万+
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。
如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:
strace追踪多线程程序
颇锐克
12-08
7622
方法一
先用ps -mp pid或者top -H查出线程pid。
然后strace -p pid追踪其中一个线程。
方法二
直接用strace -fp pid追踪进程下所有线
Strace的使用
一辈子太久只争朝夕的博客
09-15
2039
Strace的使用追踪线程PID
追踪程序
过滤futex调用
其他实用选项
linux平台编译strace源码
Strace的使用Strace诊断命令
strace -p
strace -cp strace用于追踪系统调用和信号量.在调试时,strace是一个可以采集上下文的实用工具.
1.strace PTRACE_TRACEME EPERM (Operation not permitt
strace 跟踪多线程程序不能打印系统调用的问题
龙瑜的博客
11-28
748
问题描述
在分析 netlink: 8 bytes leftover after parsing attributes in process server这个内核异常打印日志的时候,最先想到可以通过 strace 来跟踪进程,看看是在执行哪个系统调用的时候打印的告警,理论上能够行的通。
实际测试发现,strace -p 跟踪到 server 程序后,没有追踪到新的系统调用,等了几分钟也没有任何的打印。使用 strace 跟踪其它进程是正常的,说明 strace 命令本身可能没有问题,问题可能出在我们的 se
用strace查找进程卡死原因
热门推荐
Linux C/C++后台开发
01-15
2万+
最近遇到进程卡死的情况,但是自己调试的过程中并不一定能复现,都是需要运行一段时间某些条件下才会触发,对于这种运行着不能破坏现场的情况,我们可以使用gdb -p和strace -p来跟踪。
首先我们用ps auxf查看我们的进程执行到了哪一步:
可以看到执行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了
然后我们进一步通过strace查看...
strace java_Strace诊断CPU跑高问题(java/php网站)
weixin_30151565的博客
02-13
35
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:top技巧:运...
Linux下分析某个进程CPU占用率高的原因
weixin_30788619的博客
01-28
657
Linux下分析某个进程CPU占用率高的原因
通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用
1.top 查到占用cpu高的进程pid
2.查看该pid的线程:top -H -p 9532
3.查看这个线程所有系统调用:strace -p 10017
不停循环输出Connection timed ou...
后记: 用Strace 命令 Debug: mongrel CPU usage 100%问题
Auckland
06-08
110
上周周末,忽然发现在点击某个链接后,mongrel 使用了100% CPU.
反复察看代码,没有发现问题。然后仔细的查看了log file也没有看到任何问题。
由于我的部署方案是apache + mongrel所以我又察看了/etc/httpd/logs/里面的文件。
只查到了一个502的错误。但是还是百思不得其解。
用top命令察看了进程。发现只是CPU的使用率很高,内存仍然很小。...
Linux之strace命令
最新发布
风华浪浪的博客
04-02
4822
strace :监控程序的执行状况
在linux 空间下,运行一个程序时,操作系统会将应用程序封装一个进程的形式,参与操作系统的调度,可以使用strace 跟踪程序运行的情况。
基本功能
监控用户进程与内核进程的交互
追踪进程的系统调用、信号传递、状态变化
系统调用
分类
文件和设备访问:open、close、read、write、ioctl等
进程管理:fork、clone、execve、exit 等
信号:signal、kill等
内存管理:brk、mmap、mlock等
进程间通信:semge
strace + gdb 追踪多线程死锁问题
码中飞翔
03-10
2126
strace + gdb 追踪多线程死锁问题
一、strace命令简介
1、strace是什么
strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用,在其最简单的形式中,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出一行具有系统调用名称,每个系统调用的参数和返回值的文本行。在Linux中,进程是不能直接去访问硬件设备的,比如读取磁盘文件、接收网络数据...
./strace -cp
sunshineywz的博客
11-30
132
[root@dvrdvs strace-4.5.18] # ./strace -cp `pidof hik_demo`
Process 8896 attached - interrupt to quit
^CProcess 8896 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
9.
strace 线程跟踪详解
chen8238065的专栏
11-25
1万+
简介
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
相关知识
常见系统调用函数
eg:
fork 创...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
MindChange
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
原创
56万+
周排名
30万+
总排名
1万+
访问
等级
201
积分
粉丝
获赞
评论
收藏
私信
关注
热门文章
Strace诊断CPU跑高问题
4894
编译so动态库出现relocation R_X86_64_32 against `a local symbol
2223
服务端用system()执行shell命令获取执行结果(排除signal影响)
1973
wxWidgets设置登陆窗口用户名和密码的文本提示
1336
linux平台C语言定位CPU跑高线程
479
分类专栏
wxWidgets
1篇
linux c
6篇
最新评论
Strace诊断CPU跑高问题
新生代CV搬运工:
get
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
libcurl in multithreads
使用automake编译程序
linux平台C语言定位CPU跑高线程
2017年1篇
2015年6篇
2014年1篇
目录
目录
分类专栏
wxWidgets
1篇
linux c
6篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值