A-A+
php响应处理内存占用的问题
php响应处理内存占用的问题
在使用php处理程序的同时,也会占用一定的内存,当占用的内存越来越多的时候,就会出现内存不足而出现错误提示,这种情况通常都是由于一些PHP程序死循环或者是某个程序计算时间较长而导致的问题。
在thinkphp中,是可以直接进行配置,看某个程序片段执行的时间是多久,但在普通的 PHP 代码执行中,却只有靠自己写一段代码了,这在PHP之中也很容易实现的。
直接看下面的实例代码:
- <?php
- echo memory_get_usage(), '
- '; // 313864
- $tmp = str_repeat('http://www.xiariboke.net/', 4000);
- echo memory_get_usage(), '
- '; // 406048
- unset($tmp);
- echo memory_get_usage(); // 313952
- ?>
其中URL网址就是代码片段所在的位置了,而后面的单元则是 byte(s),也就是除了 memory_get_usage()之后,这个程序本身所占用的内存大小。
我们主要看 unset 这个函数的使用,是把不需要的变量进行删除,以达到PHP优化代码的目的,类似的代码还有 php mysql_free_result() 等函数,可以清空不再需要的一些结果集或者变量等,这样在下一次再次执行计算的时候就可以得到更多的内存。用得较多的应该是 unset 这个函数吧。
好了,我们再来看一个关于 memory_get_usage() 的函数,如下:
- if (!function_exists('memory_get_usage'))
- {
- /**
- +----------------------------------------------------------
- * 取得内存使用情况
- +----------------------------------------------------------
- * @return integer
- +----------------------------------------------------------
- */
- function memory_get_usage()
- {
- $pid = getmypid();
- if (IS_WIN)
- {
- exec('tasklist /FI "PID eq ' . $pid . '" /FO LIST', $output);
- return preg_replace('/[^0-9]/', '', $output[5]) * 1024;
- }
- else
- {
- exec("ps -eo%mem,rss,pid | grep $pid", $output);
- $output = explode(" ", $output[0]);
- return $output[1] * 1024;
- }
- }
- }
函数的使用实例:
- <?php
- //memory_get_usage();
- $m1 = memory_get_usage();
- echo '
- m1:',$m1;//58096
- $a = 'hello';
- $b = str_repeat($a,1000);
- $m2 = memory_get_usage();
- echo '
- m2:',$m2;//63424
- unset($b);
- $m3 = memory_get_usage();
- echo '
- m3:',$m3;//58456
- ?>
大家在使用的时候,可以看看哪个更适合一些,实际上如果我们只想要统计一下自己PHP所使用的内存大小,第一种方法完全就足够了,PHP的代码主要在于优化,优化好之后再进行占用内存代码的测试,找到一个占用内存最小的方法即可。
php升级对内存占用优化很大!