strace 哇,好多系统调用

主要观点:

  • strace 是 Linux 的系统调用跟踪器,使用 ptrace()接口,会暂停目标进程,导致性能开销大,在生产环境中需谨慎使用,可先尝试其他替代品。
  • 给出了一些 handy strace one-liners 示例,方便快速使用 strace 进行调试。
  • 介绍了学习 strace 的步骤,包括了解关键系统调用和简单的 strace 示例。
  • 通过 ls(1)的例子展示了 strace 可用于发现性能问题,但也有局限性,如不能很好地确定涉及延迟的性能问题。
  • 与其他先进的跟踪器进行了比较,指出了 strace 的优缺点。
  • 提到 strace 在不同地区的情况以及一些关于 strace 的有趣事实。
  • 推荐了一些关于 strace 内部和 ptrace()的学习资源,以及超越 strace 的其他工具。
  • 展望了 strace 的未来,认为未来可能会有替代品出现,且 strace 自身也可能成为这些替代品的包装器。

关键信息:

  • strace 会暂停应用程序两次,每次系统调用都会进行上下文切换,导致性能严重下降,如 dd 命令在使用 strace 时速度会降低 442 倍。
  • 关键系统调用包括 read、write、open、close、fork、exec、connect、accept、stat、ioctl、mmap、brk 等,每个系统调用都有 man 页。
  • handy strace one-liners 可用于不同的调试需求,如 slow 目标命令、打印特定系统调用等。
  • 学习 strace 可通过了解关键系统调用和对基本命令进行 strace 调试。
  • strace 与其他跟踪器相比,简单易用但性能开销大,不能同时跟踪多个进程, visibility 有限。
  • strace 在法国被列为破解工具,有不同版本和发展历史,还有一些有趣的相关事实。
  • 推荐了学习 strace 内部和 ptrace()的资源,以及超越 strace 的工具如 perf_events、sysdig 等。
  • strace 的未来可能会被其他更低开销的工具替代,或自身成为这些工具的包装器。

重要细节:

  • 在性能调优 ls(1)的例子中,设置 TZ 环境变量可消除不必要的 stat()调用,从而提高性能 23%。
  • strace 过去曾有导致目标进程或其子进程处于 STOP 状态的 bug,可能导致生产中断。
  • 文中给出了多个关于 strace 的文章链接,展示了不同场景下 strace 的应用。
  • 展示了 Linux 性能观测工具的 diagram,说明了 strace 的局限性和其他工具的作用。
阅读 4
0 条评论