php内存溢出问题(out of memory)

yzxlyl 2018-01-03 11:22:30
(同一套系统在其他服务器上不会出现这个错误)有一台服务器经常遇到out of memory之类的内存分配不都问题,服务器物理内存其实还有很多,只使用30%不到,增加php.ini的memory_limit到512M也没用,出错其实请请求分配的几十k的内存而已

另外的问题:php.ini设置的memory_limit大小,是所有人会话的内存总计限制,还是单个会话的内存限制或者当前页面的内存限制
...全文
1136 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-03
  • 打赏
  • 举报
回复
memory_limit 是当前会话的内存使用上限 你的问题应该是内存碎片太多,无法请求道所需的连续内存块 重启操作系统或安装内存整理工具,可缓解 但最好是调整算法,变量复用(注意运行期间,数组所占内存是不会释放的,即便你把数组变量删除。因为他是以引用方式存在的)
tottyandbaty 2018-01-03
  • 打赏
  • 举报
回复
如果用了超大数组,可以使用yield 相信会有很大改善
xuzuning 2018-01-03
  • 打赏
  • 举报
回复
创建的数组变量,虽然在 unset 后用 memory_get_usage 查看时,所占内存消失了,但开始申请的空间并没有退还给操作系统。(长字符串也有这种情况) 所以正确的做法不是 unset,而是重新对她赋值,这样只要不超出原先的大小,就不会再去申请内存 当然,若要做到变量复用,可能是要调整程序,甚至重写的
yzxlyl 2018-01-03
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
memory_limit 是当前会话的内存使用上限 你的问题应该是内存碎片太多,无法请求道所需的连续内存块 重启操作系统或安装内存整理工具,可缓解 但最好是调整算法,变量复用(注意运行期间,数组所占内存是不会释放的,即便你把数组变量删除。因为他是以引用方式存在的)
临时用了数组,再unset也不能释放内存吗?那数组应该怎么处理呢?
tottyandbaty 2018-01-03
  • 打赏
  • 举报
回复
最好看下PHP的日志,apache或则nginx的日志,分析下就知道问题所在了

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧