内存泄漏指的是在程序运行过程中申请了内存,但是在使用完成后没有及时释放的现象
内存泄漏的debug及工具
内存泄漏的程序通常很容易发现,因为症状都表现为内存占用的持续增长,在发现内存持续增长后我们需要判断是什么导致了内存泄漏,这时往往需要借助一些工具来帮助追查,我们可以用到两个工具:PHP内置内存泄漏探测及valgrind内存泄漏分析。
PHP本身有自己的内存管理,如果发现PHP有内存泄漏,可以尝试重新编译一个PHP,将编译选项--enable-debug打开(同时所有的扩展也同样需要编译成支持debug模式的):./configure --enable-debug,这样重新编译后,如果PHP探测到有内存泄漏发生则会往标准错误输出打印错误信息。这样我们可以快速的发现问题。
在开启debug模式下,PHP中会有一个函数leak()可以用于触发内存泄漏,这个函数什么都不做,只是申请一块内存但不释放
valgrind辅助法
valgrind是一个动态分析工具构建框架,可以用来分析程序的内存、线程等问题探测,程序性能分析等。具体的功能见官网,这是非常值得尝试的工具。这里要使用的就是valgrind的内存错误分析工具。