如何解决php脚本运行占用内存过大无法释放或者内存不足的问题

Fatal Error: Allowed memory size of xxxxxx bytes exhausted

php脚本运行占用内存过大


1、可以通过 php 设置 memory_limit 解决这个问题

在公共头部加入:

// 设置内存限制为 256MB
ini_set('memory_limit', '256M');

2、查看 Mysql 慢日志 

如果Mysql 查询比较慢,多个查询的时候也会耗尽资源

3、查看PHP 代码是否有大量循环

使用大量循环或递归调用可能会导致内存占用增加。每次循环迭代或递归调用都会在内存中创建新的变量和数据结构。

4、其他解决方案(来源Chat)

当 PHP 脚本占用大量内存时,可以采取以下详细解决方案来减少内存使用:

  1. 优化循环和递归

    • 避免不必要的循环和递归调用。

    • 尽量使用迭代而不是递归,因为递归可能会导致内存堆栈溢出。

    • 如果必须使用递归,确保有合理的终止条件,避免无限递归。

    • 注意循环变量的作用域,确保在循环结束后释放内存。

  2. 分批处理数据

    • 将大型数据集分成较小的批次进行处理,而不是一次性加载整个数据集。

    • 使用分页或限制返回的行数来减少内存使用。

    • 如果可能,使用流式处理来逐步处理数据,而不是一次性加载全部数据。

  3. 及时释放内存

    • 在使用完对象或资源后,使用 unset() 函数或显式调用对象的析构函数来释放内存。

    • 注意避免在不再需要的变量上持续引用。

  4. 使用引用传递

    • 在函数或方法调用时,使用引用传递参数而不是复制它们的值。

    • 这可以通过在函数定义和调用时使用 & 符号来实现。

  5. 避免不必要的数据复制

    • 尽量避免不必要的数据复制和转换操作,这会导致内存占用增加。

    • 使用引用或原地修改数据,而不是创建新的变量或数据副本。

  6. 优化数据库查询

    • 对于与数据库交互的脚本,优化查询可以减少内存使用。

    • 使用索引来加速查询操作。

    • 限制返回的行数,只获取需要的数据。

    • 使用适当的查询语句来减少数据的加载和处理。

  7. 增加 PHP 内存限制

    • 如果脚本确实需要更多内存来执行,可以通过修改 PHP 配置文件(如 php.ini)中的 memory_limit 选项来增加内存限制。

    • 但要谨慎使用,确保服务器有足够的可用内存,并避免设置过高的内存限制。

通过采取上述解决方案,你可以有效地减少 PHP 脚本的内存使用。然而,需要注意的是,优化内存使用是一个复杂的过程,需要根据具体情况进行调整和测试。建议在优化脚本之前进行详细的分析和性能测试,以确保采取的措施是有效的。


文章来源地址https://www.toymoban.com/diary/php/281.html

到此这篇关于如何解决php脚本运行占用内存过大无法释放或者内存不足的问题的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/php/281.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年08月19日 16:46
下一篇 2023年08月19日 16:46

相关文章

  • 优化Java内存过大的情况,通过启动参数控制java运行中程序的内存占用大小

    在生产服务运行中,如果在小服务器上Java如果不做任何处理,一个Java程序最少默认能达到200m左右。在1gb的服务器上如果多挂几个Java程序,会经常出现宕机的情况。所以要进行优化 -Xms 最小内存数 m为单位,参数后面不加空格,不加等于号直接写 –Xmx1m 最大内存数 m为单位,

    2024年02月09日
    浏览(60)
  • python中使用selenium进行爬虫时,导致(内存已缓存)备用内存占用过大导致崩溃问题,3个解决方案

    在使用python进行爬虫的时候,使用selenium进行爬取的时候经常会出现已缓存过大的情况,如果缓存出现过大之后再次执行的话就会计算机拒绝,但是这个时候我们的内存又有很多空间可以使用,一开始我以为是占用文件过多然后点360的那个进行文件整理和清理垃圾,结果效果

    2023年04月08日
    浏览(50)
  • 【Android】 频繁刷新 RecyclerView导致View 对象引用过多引起的Native 内存占用过大解决办法

    在 RecyclerView 中,如果频繁刷新 RecyclerView,可能会导致 Native 内存中有大量的 TextView 对象,从而导致内存占用过多的问题。以下是一些可能导致该问题的原因和解决方法: 使用 ViewHolder 在 RecyclerView 中,使用 ViewHolder 可以避免频繁创建和销毁 View 对象,从而减少内存占用。可

    2024年02月08日
    浏览(72)
  • py脚本解决ArcGIS Server服务内存过大的问题

    在一台服务器上,使用ArcGIS Server发布地图服务,但是地图服务较多,在发布之后,服务器的内存持续处在95%上下的高位状态,导致服务器运行状态不稳定,经常需要重新启动。重新启动后重新进入这种内存高位的陷阱。 打开任务管理器发现大量 ArcSOC.exe 进程,这些进程CPU使

    2024年02月09日
    浏览(48)
  • 华纳云:CMD无法运行PHP文件路径如何解决

    本篇内容主要讲解“CMD无法运行PHP文件路径如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CMD无法运行PHP文件路径如何解决”吧! 一、为什么CMD无法运行PHP文件路径 在CMD中运行PHP文件路径时,有可能遇到的问题

    2023年04月13日
    浏览(40)
  • 解决mysql启动占用运行内存过高

    方法1(选取于网络,针对自己的服务器没起作用) 修改my.cnf参数: 重启mysql服务。我这里遇到的没解决,不知道其他人能够解决问题,物理 内存300M以及虚拟内存1G依旧,没改善。 方法2:(解决了当前自己遇到的问题) 要关闭 Performance Schema ,5.6默认开启的,该参数主要用

    2024年02月07日
    浏览(51)
  • linux环境下查看因内存占用过大被杀掉的进程

    最近发生两次游戏服务器进程突然消失的事件,查询日志上下文没有找到有用的信息,日志显示运行到某处戛然而止,此处代码逻辑简单,排除异常逻辑导致的服务器进程崩溃,所以联想到之前同一台服务器上部署多个进程,因占用内存太大被内核杀死的情况,猜测本次也是

    2024年02月10日
    浏览(47)
  • VMware 虚拟机占用磁盘空间过大的一种解决方案

    在使用VMware虚拟机的过程中,VM会自动扩大虚拟磁盘的占用空间。发现无论是VM自带的碎片整理还是压缩,这两个操作都无法明显减少虚拟机占用空间。 现在找到一种方法可以做到这点( 可能只适用于VM workstation pro,并未测试过普通版本 ),下面是方法的整理 1.正常关闭虚拟

    2024年02月13日
    浏览(83)
  • linux中crontab编写自动化定时脚本无法正确运行(问题解决与汇总)附相关内容

    -问题描述 在Linux(RedHat)中想要执行一段自动化备份日志的命令 但是通过下面的命令 编辑了 crontab 没正确运行 0 0 * * * /path/to/save_journal_logs.sh 文件中的内容如下: save_journal_logs.sh 通过下面的命令编辑了脚本 crontab -e 发现脚本没有正确备份 问题排查 执行权限 切换成了 root (

    2024年01月16日
    浏览(52)
  • 《解决方案》无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    下载Vscode后,在终端使用pip安装包时出现下列报错内容 1.打开python所在的文件位置 2.打开后查看文件内容  3.当文件中只有快捷方式的时候需要继续寻找文件位置,右键点击属性 ,绿色框即为文件存放位置,Ctrl+C复制     4.右键点击此电脑属性,调出环境变量,点击高级选项

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包