php 定时任务,内存溢出

背景

之前有写一个php 爬虫定时任务,发现系统的内存飞快的上涨,直觉告诉我应该是php内存泄漏惹得祸。
于是用。

killall php

杀掉了php 的进程。从内存占用78%,变成了20%

解决方案

方案一

像上面描述。在凌晨的时候把进程给kill 了。
或者查看php 进程内存占用百分比,如果达到 了一定高度时候,给kill了。

方案二

php-fpm.conf中有个参数pm.max_requests,等同于PHP_FCGI_MAX_REQUESTS。该值的意思是一个fpm进程处理多少个请求后自动杀掉另起新进程。(这个好想也不推荐)

优化方案

1。应当尽可能减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。

2。数据库操作完成后,要马上关闭连接;

3。一个对象使用完,要及时调用析构函数(__destruct())

4。用过的变量及时销毁(unset())掉

5。可以使用memory_get_usage()函数,获取当前占用内存 根据当前使用的内存来调整程序

6。unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。(PHP内核的gc垃圾回收机制决定)

7。有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存(PHP变量底层实现是一个_zval_struct结构体,is_ref__gc表示引用计数 is_ref__gc表示是否为引用)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廖圣平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值