- 使用 asan 内存检测
- 编译 PHP
- 编译 Swoole
- 关闭内存泄漏检测
使用 asan 内存检测
高版本gcc和clang支持asan内存检测,与valgrind相比asan消耗非常低,甚至可以直接在生产环境中启用asan排查跟踪内存问题。
使用asan特性,必须将PHP也编译为asan,否则运行时会报错。
编译 PHP
执行./configure后,修改Makefile修改CFLAGS_CLEAN 末尾追加 -fsanitize=address -fno-omit-frame-pointer,然后执行make clean && make install
编译 Swoole
phpize./configure --enable-asanmakemake install
关闭内存泄漏检测
PHP的ZendVM有较多进程退出时内存释放的逻辑,可能会引起asan误报,可以设置export ASAN_OPTIONS=detect_leaks=0暂时关闭asan的内存泄漏检测。
