关于PHP进程防止内存溢出的排查
发布:smiling 来源: PHP粉丝网 添加日期:2022-07-02 08:45:26 浏览: 评论:0
PHP进程内存大小是可以设置的,默认在配置文件 memory_limit=128M
也可以在程序中动态设置 ini_set('memory_limit', '1024M');这样就设置成1G了。但是一般不会这样设置,毕竟会影响到机器的其他服务。有时候可以排查一下代码,很多时候内存溢出是因为php变量没有及时释放,或者遍历比较大的数组时出现。
1.排查
memory_get_usage() php有这个系统函数,可以得到当前进程使用了多少内存空间。返回是字节单位round(memory_get_usage()/1024/1024, 2).'MB',转换为MB.
可以追踪代码执行过程中内存的变化。
2.常见内存溢出的案例
遍历大型数组,修改数组的某些值,导致遍历过程数组复制一份。
php变量的特点是“写时复制”,当涉及$arr数组赋值时,会产生分裂,生成新的HashTable结构体,导致内存占用瞬间变大
3.遍历赋值其他变量
- $arr = range(0, 599999);
- echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
- foreach($arr as $key => $item) {
- $arr[$key] = $item + 1;
- if($item % 100000 == 0) {
- echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
- }
- }
- echo 'foreach后内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
- //输出
- /*
- foreach前内存:49.9MB
- foreach中内存:81.36MB
- foreach中内存:84.42MB
- foreach中内存:87.47MB
- foreach中内存:90.52MB
- foreach中内存:93.57MB
- foreach中内存:96.62MB
- foreach后内存:49.9MB
- */
解决方法,采用引用遍历
- $arr = range(0, 599999);
- echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
- foreach($arr as $key => &$item) {
- $arr[$key] = $item + 1;
- if($item % 100000 == 0) {
- echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
- }
- }unset($key);unset($item);
遍历完成后记得unset($key);unset($item); 因为$item是对数组最后一个元素的引用,后面如果修改这个变量,会直接修改到数组。
Tags: PHP进程 PHP内存溢出
- 上一篇:PHP实现长轮询【代码示例】
- 下一篇:最后一页
相关文章
- ·PHP进程锁类PHPLock程序代码(2014-06-15)
- ·单台服务器的PHP进程之间实现共享内存的方法(2021-02-20)
- ·php计划任务之验证是否有多个进程调用同一个job的方法(2021-06-29)
- ·php进程daemon化的正确实现方法(2021-10-28)
- ·swoole_process实现进程池的方法示例(2021-11-01)
- ·浅谈PHP进程管理(2021-11-12)
- ·php进程(线程)通信基础之System V共享内存简单实例分析(2022-01-21)
- ·PHP 进程池与轮询调度算法实现多任务的示例代码(2022-01-24)
- ·一文看懂PHP进程管理器php-fpm(2022-03-11)
- ·PHP基于进程控制函数实现多线程(2022-04-03)
- ·浅谈并发处理PHP进程间通信之外部介质(2022-04-28)
- ·浅谈并发处理PHP进程间通信之System V IPC(2022-04-28)
- ·PHP对象相互引用的内存溢出实例分析(2021-04-10)
- ·PHP内存溢出优化代码详解(2022-04-13)
- ·谈谈关于PHP内存溢出的思考(2022-06-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)