strace 跟踪php语言 hello world 的系统调用

内容纲要

引言

随着各种开发语言的封装度越来越高,作为应用层的开发工程师,很多时候其实是不了解语言底层的实现,以及系统底层的调用情况。当遇到一些棘手问题时,除了各种百度、google其实没有更好的办法。大佬可以忽略^_^。问题抛出来了,有没有解决的方法呢?应该有,今天暂且尝试一下。

strace 基本使用

上面只列出了基本的使用,更复杂的用法可以参考相关文档。

测试环境

  • linux(ubuntu20.04)
  • php环境(php7.4)
  • strace安装(apt install strace)
  • 测试脚本(test.php)

测试脚本内容

查看系统调用的统计信息

结果如下:

mmap的调用次数最多,这个是内存映射的系统调用函数。即把文件内容放到内存中。

查看系统调用的日志信息

具体的结果信息:

信息量太大,我只截取了部分内容。
看到上面这么大一堆,是不是有点劝退的感觉@_@。有同感,其实静下心来看,可以发现其中的规律。总结如下:

  • 1.读取文件(openat)
  • 2.把文件内容加载到内存(mmap)
  • 3.读取代码,加载到内存,语法解析,执行代码,输出执行结果 (php)
    大致就是以上流程,具体的内容再根据linux中的 man来查看,可以解决60%以上的问题

有何用

应该会有小伙伴,你知道这些有啥用?个人看法,理解了程序底层的实现,就可以更好的理解程序的执行结果,同时可以用于排错调优等。后续再用实际案例来说明。

发表评论

邮箱地址不会被公开。 必填项已用*标注

6 × 1 =