首页 > 系统 > Linux > 正文

Linux下定位异常消耗的线程实战盘点

2022-07-09 12:57:43
字体:
来源:转载
供稿:网友
前言:
之前分享过一篇Linux开发coredump文件分析实战分享 ,今天再来分享一篇实战文章。
 
在我们嵌入式linux开发过程中,开发过程中我们经常会使用多进程、多线程开发。那么多线程使用过程中,我们大概率会遇到某线程长时间占用cpu,导致设备执行异常。
 
通常只有四五个线程,我们可以通过一个个线程调试捕捉到异常线程,如果你开发的设备上面运行了大概三四十个线程,我们一下子不好看到对应哪个线程出问题,也不好使用列举法进行搜索,这个时候我们需要配合一些工具进行监控以及检查我们执行的进程下面的线程。下面我就给大家介绍一下我自己工作中实际遇到的例子。
 
情节介绍:
在工作中,我遇到这样一个问题,我的设备跑机的时候发现,机器运行某些状态时候有些怪异,对于某些机制的处理响应不够及时,最后top检查,发现是我运行的某个进程中的某几个线程运行cpu占有率很高,导致其他的一些线程无法及时运行。
 
找到问题了,接下来我们就开始找对应的线程然后进行修改,前文提到,进程里面有一两个线程还好说,我们可以通过一些比较基础的方法,一个个线程进行log或者其他手段的信息输出,但是如果我们遇到单个进程里面有很多线程的时候,我们如何检查呢?
 
初步列一个使用的工具大纲:ps 组合命令、top组合命令、pstack、strace、ltrace、gdb attach 实时调试 、 kill 、coredump文件查看线程堆栈
 
以上就是我使用到的一些命令和操作,接下来一一给大家进行分析和介绍:
 
首先给大家介绍每个工具和命令详细介绍,再用自己的一个小例子把这些工具进行组合使用说明。
 
工具和组合命令详细介绍
首先给详细的介绍一下这些工具说明书:
 
ps 的选项参数介绍:
ps命令大家在linux使用应该是很熟悉的,ps是Process Status的缩写,用来列出系统中当前运行的进程。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。ps命令所列出的进行是当前进程的快照,也就是并不是动态的,而是执行该命令时那一时刻进行的状态。
 
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
我一般都是使用 ps -aux进行查看后台运行的进程pid
 
下面再进行补充一下今天要使用到的ps组合命令
 
查看进程对应的线程

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表