• 使用 asan 内存检测
    • 编译 PHP
    • 编译 Swoole
    • 关闭内存泄漏检测

    使用 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的内存泄漏检测。