当PHP内存泄漏时,如何检测?
程序员文章站
2022-05-22 12:19:32
...
一 PHP内置内存泄漏探测
PHP本身有自己的内存管理,在编译时,增加编译选项--enable-debug 以及相应扩展编译时加上 ./configure --enable-debug,这样编译后,使用命令行执行php test.php 如果有内存泄漏则会往 标准错误输出 打印错误信息。
注意:这个方法只能检测到使用了Zend内存管理的情况,对于直接使用malloc/free来申请内存的应用或扩展是无法检测到的。
二 valgrind
wget http://valgrind.org/downloads/valgrind-3.11.0.tar.bz2 tar -jxvf valgrind-3.11.0.tar.bz2 cd valgrind-3.11.0; ./autogen.sh mkdir /usr/local/valgrind/ && ./configure --prefix=/usr/local/valgrind make && make install vim /etc/profile export USE_ZEND_ALLOC=0 //php-cli valgrind --leak-check=full php test.php //php-fpm vim # php_fpm_BIN=${exec_prefix}/sbin/php-fpm export USE_ZEND_ALLOC=0 php_fpm_BIN="valgrind --log-file=/var/valgrind-%p.log /usr/local/php/sbin/php-fpm" /usr/local/php/sbin/init.d.php-fpm restart tail -f valgrind*
USE_ZEND_ALLOC是PHP提供的hook,我们可以在启动PHP前指定USE_ZEND_ALLOC=0,关闭内存管理功能。这样所有的内存分配都会直接向操作系统申请,这样valgrind就可以帮助我们定位问题。
【相关教程推荐】
1. php编程从入门到精通全套视频教程
2. php从入门到精通
3. bootstrap教程
推荐阅读
-
php-当一个程序被调试时 后台(或者说debugger)是如何工作运行的
-
php-当一个程序被调试时 后台(或者说debugger)是如何工作运行的
-
性能监控 - 如何检测PHP某个方法 在一次请求中调用了多少次,每次的耗时和耗内存情况?
-
性能监控 - 如何检测PHP某个方法 在一次请求中调用了多少次,每次的耗时和耗内存情况?
-
当PHP内存泄漏时,如何检测?
-
当PHP内存泄漏时,如何检测?
-
如何解决PHP里大量数据循环时内存耗尽的问题_PHP教程
-
当源站出现问题时如何使用户的请求暂时可以得到响应_PHP教程
-
当SQL Server数据库崩溃时如何恢复?_PHP教程
-
delphi读写CMOS内存 如何解决PHP里大量数据循环时内存耗尽的问题