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 住该进程,进行调试了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值