linux下程序分析工具总结

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

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

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

linux下程序分析工具总结_第1张图片

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

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

        例如 iotop >> res.txt

linux下程序分析工具总结_第2张图片

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

linux下程序分析工具总结_第3张图片

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

linux下程序分析工具总结_第4张图片

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

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

linux下程序分析工具总结_第5张图片

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

linux下程序分析工具总结_第6张图片

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

你可能感兴趣的:(项目demo,linux,资源使用,性能分析,底层实现,进程)