linux下程序分析工具总结

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下程序分析工具总结相关的知识,希望对你有一定的参考价值。

最近分析阿三做的一个数据库备份产品 NetVault,学了几招,下面进行一次汇总。

 1、首先需要想办法让自己想要分析的进行尽可能的长时间运行,比如对于这个程序,我在数据库中生产大量的数据,并使用NetVault进行备份,使其备份进程可以长时间的运行。

2、使用 top 工具查看当前正在运行的进程。因为备份组件在备份过程中会消耗大量的系统资源,所以需要格外注意 top 输出结果最上面的几个进程,特别是突然出现的备份进程。

3、在使用 top 的过程中还可以同时使用 iotop 查看当前进行 io 操作的进程。

        一个小技巧,如果来不及查看界面数据,可以将输出结果重定向到文件中。

        例如 iotop >> res.txt

4、使用 dstat 工具也可以查看系统的各项资源详细使用情况(CPU、内存、磁盘、网络、IO等)

5、明确了具体的进程后,记录 PID,之后使用 lsof -p [pid] 可以查看该进程运行过程中使用的文件。

 6、如果需要具体的监控某一个文件会被哪些进程使用,可以使用 fuser。例如 "fuser -uv .”可以监控当前文件夹,“fuser -uv libssl.so”可以监控具体的文件,当然使用 "lsof | grep libssl.so" 也可以。

7、如果需要查看进程的堆栈(函数调用逻辑),可以使用 pstack [pid] 进程查看,也可以使用 gdb。需要注意的时,这种方法获取的结果也是进程运行的瞬时的堆栈状态,可以在进程的运行过程中多打印几次

8、确认了程序执行组件后,可以通过 nm 查看程序使用的符号,如函数名、变量等,以及这些符号存储的区域。

9、更进一步的可以使用 gdb attach [pid] 对进程进行调试,打断点运行或者打印堆栈信息等。不过需要选择合适的时机,因为进程的运行状态是转瞬即逝的,可以先使用 nm 查看进程包含了哪些调用函数,如果这些函数是在公共库(提供了源码),可以修改源码中对应的函数(例如,休眠一段时间),之后重新编译出动态库,替换掉进程依赖的动态库。这样由于增加了休眠,gdb就可以attach 住该进程,进行调试了。

以上是关于linux下程序分析工具总结的主要内容,如果未能解决你的问题,请参考以下文章

Linux下常用系统分析工具总结(转)

Linux下常用调试工具总结

2017-2018-1 20179215《Linux内核原理与分析》第九周作业

理解进程调度时机跟踪分析进程调度与进程切换的过程(Linux)

Linux下利用Valgrind工具进行内存泄露检测和性能分析

Linux下启动时间优化专题