在我们的嵌入式linux开发过程中,我们在开发过程中经常会用到多进程、多线程开发。在这么多线程的使用过程中,很有可能某个线程会长时间占用cpu,导致设备性能异常。通常只有四五个线程。我们可以一个一个调试捕获异常线程。如果你开发了大概三十、四十个线程运行在设备上,我们很难一下子看出哪个线程有问题,也不好用。按枚举搜索。这时候我们就需要配合一些工具,对我们执行的进程下的线程进行监控和检查。我举一个我在自己工作中实际遇到的例子。剧情简介:在工作中,我遇到了这样一个问题。我的设备在运行的时候,发现机器运行在一些怪异的状态,对某些机制的响应不够及时。最后查看top,发现是在运行的某个进程中有一些线程运行时CPU占用率高,导致其他一些线程无法及时运行。我们发现了问题,然后我们开始寻找对应的线程,然后修改。如前所述,进程中有一个或两个线程。幸运的是,我们可以使用一些基本的方法从日志或其他方式中输出信息,一一列举,但是如果遇到单个进程中有多个线程,我们如何检查呢?初步概述使用的工具:ps组合命令、top组合命令、pstack、strace、ltrace、gdbattach实时调试、kill、coredumpFileViewThreadStack以上是我使用的一些命令和操作。接下来,我将一一分析介绍:首先,我将详细介绍每个工具和命令,然后用我自己的一个小例子来组合这些工具。使用说明。工具和组合命令的详细介绍首先,我们来详细介绍一下这些工具手册:ps选项参数介绍:Linux中的ps命令大家应该都不陌生了。ps是ProcessStatus的缩写,用来列出当前正在运行的进程。使用该命令可以判断哪些进程正在运行及其状态,进程是否终止,进程是否死亡,哪些进程占用资源过多等。ps命令列出的进度是当前进程的快照,即不是动态的,而是命令执行时那一刻的状态。ps的参数很多,这里只介绍几个常用的参数,简单介绍一下它们的含义-A列出所有进程-wdisplayswiderinformation显示更多的信息-au显示更详细的信息-aux显示allincluded我平时用的ps-aux为其他用户的行程查看后台运行进程的pid。再补充一下今天要用到的ps组合命令,查看进程对应的线程。pid可以自己替换)第一行是对应的进程ID,第二行是对应的线程ID查看进程对应线程的执行时间ps-eLopid,lwp,pcpu|grep1780(1780这里是真实进程的pid替换)第一行是进程pid,第二行是进程中线程对应的pid,第三行是线程的执行时间,单位ms。我们通过线程执行时间的长短,配合线程的栈信息,线程频繁进行IO操作或者线程频繁执行的库函数来判断线程是否误占用了CPU资源。top组合命令介绍:top命令也是大家比较熟悉的一个命令。它可以显示有关系统当前正在执行的进程的信息,包括进程ID、内存使用情况和CPU使用情况。也可以向指定进程发送信号。-b批处理-c显示完整信息-I忽略失效进程-s秘密模式-S累积模式-i