Linux复习笔记(7)

调试及性能分析

调试代码

打印调试法与日志

日志较普通的打印语句的优势:

  • 可以将日志写入文件、socket或者甚至是发送到远端服务器而不仅仅是标准输出
  • 日志可以支持严重等级,这使您可以根据需要过滤日志
  • 对于发现新问题,很有可能日志中已经包含了可以帮助您定位问题足够的信息
第三方日志系统

对于UNIX系统来说,程序的日志通常存放在/var/log
大多数Linux系统都会使用systemd,这是一个系统守护进程。systemd会将日志以某种特殊格式存放于/var/log/journal,可以使用journalctl命令来显示这些消息。
大多数UNIX系统,可以使用dmesg命令来读取内核的日志

调试器

调试器是一种可以允许我们和正在执行的程序进行交互的程序,它能做到:

  • 当到达某一行时将程序暂停
  • 一次一条指令地逐步执行程序
  • 程序崩溃后查看变量的值
  • 满足特定条件时暂停程序
  • 其他高级功能

python的调试器是pdb

专门工具

当程序需要执行一些只有操作系统内核才能完成的操作时,它需要使用系统调用
在Linux中可以使用strace

静态分析

静态分析会将程序的源码作为输入然后基于编码规则对其进行分析并对代码的正确性进行推理。

性能分析

需要性能分析和监控工具,它们会帮助您找到程序中最耗时、最耗资源的部分,这样就可以有针对性的进行性能优化。

计时

真实时间、用户时间、系统时间

  • 真实时间:从程序开始到结束流失掉的真实时间,包括其他进程的执行时间以及阻塞消耗的时间
  • User:CPU执行用户代码所花费的时间
  • Sys:CPU执行系统内核代码所花费的时间
性能分析工具
CPU

CPU性能分析工具有两种:追踪分析器及采样分析器

内存

可以使用Valgrind这样的工具来检查内存泄漏的问题。
对于 Python 这类具有垃圾回收机制的语言,内存分析器也是很有用的,因为对于某个对象来说,只要有指针还指向它,那它就不会被回收。

事件分析

perf命令将CPU的区别进行了抽象,它不会报告时间和内存的消耗,而是报告与您的程序相关的系统事件。

可视化

对于采样分析器来说,常见的显示CPU分析数据的形式是火焰图。火焰图同时还是可交互的,您可以深入程序的某一具体部分,并查看其栈追踪。
调用图和控制流图可以显示子程序之间的关系,它将函数作为节点并把函数调用作为边。

资源监控
  • 通用监控
  • I/O操作
  • 磁盘使用
  • 内存使用
  • 打开文件
  • 网络连接和配置
  • 网络使用
专用工具

您只需要对黑盒程序进行基准测试,并依此对软件选择进行评估。 类似hyperfine这样的命令行可以帮您快速进行基准测试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值