使用 asan 内存检测

高版本gccclang支持asan内存检测,与valgrind相比asan消耗非常低,甚至可以直接在生产环境中启用asan排查跟踪内存问题。

使用asan特性,必须将PHP也编译为asan,否则运行时会报错。

编译 PHP

执行./configure后,修改Makefile修改CFLAGS_CLEAN 末尾追加 -fsanitize=address -fno-omit-frame-pointer,然后执行make clean && make install

编译 Swoole

  1. phpize
  2. ./configure --enable-asan
  3. make
  4. make install

关闭内存泄漏检测

PHPZendVM有较多进程退出时内存释放的逻辑,可能会引起asan误报,可以设置export ASAN_OPTIONS=detect_leaks=0暂时关闭asan的内存泄漏检测。