开发者社区 问答 正文

内部服务器错误500,PHP Fatal error: Allowed memory size o

1、问题是这样的,前段时间还是好好的,最近这几天我登陆后台显示:

“服务器错误

500 - 内部服务器错误。

您查找的资源存在问题,因而无法显示。”

 

2、然后我打开500详细错误显示:“PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 16384 bytes) in D:\websoft\web\drkb\ThinkPHP\Common\common.php on line 744


 

3、接着我去百度搜索出了一大推这样的解决办法:“修改 php.ini配置文件,在php.ini中找到

memory_limit = 512M”

 

4、修改好后我上传重启服务器,结果还是显示同上面“2”的内容,然后在将memory_limit = 改成1024M依然不能解决问题,又改成-1也是不能解决,请问是不是服务器有问题还是怎么的?应用怎么解决?

展开
收起
1158415352767596 2019-03-08 19:56:16 735 分享 版权
阿里云 AI 助理回答

根据您描述的问题,您的PHP应用遇到了内存耗尽错误,具体表现为后台登录时出现500内部服务器错误,并且错误日志显示在执行某段代码时内存分配超出限制。尽管您已经尝试通过修改php.ini配置文件中的memory_limit值来解决此问题,但即便将该值设置得非常大(包括设置为-1以允许无限制内存使用),问题依旧存在。这通常指示问题可能并非仅仅由内存限制引起,还可能是代码中存在内存泄漏或者特定操作消耗了大量内存。以下是一些建议的排查和解决步骤:

问题分析

  1. 内存溢出错误:您遇到的错误信息“PHP Fatal error: Allowed memory size of 134217728 bytes exhausted”表明在执行到ThinkPHP框架的Common\common.php第744行时,PHP脚本尝试分配的内存超出了当前配置的最大允许值(128MB)。

  2. 已尝试解决方案:您已尝试通过增加memory_limit至512M乃至1024M甚至-1(无限制),但问题未得到解决,这提示问题根源可能不在内存限制本身。

解决步骤

1. 确认配置更改生效

  • 验证配置:首先,请确保您修改的是正在被PHP使用的那个php.ini文件。可以通过创建一个包含<?php phpinfo(); ?>的PHP文件并访问它来检查memory_limit的实际值,确认修改是否生效。

2. 代码审查与优化

  • 定位问题代码:深入分析报错文件D:\websoft\web\drkb\ThinkPHP\Common\common.php的第744行及周边逻辑,查找可能导致大量内存消耗的操作,如大数据量的数组、循环、递归等。

  • 优化代码:对发现的内存密集型操作进行优化,比如减少不必要的数据加载、优化数据库查询、使用迭代而非递归等方法减少内存使用。

3. 检查内存泄漏

  • 使用工具:考虑使用Xdebug或其他PHP性能分析工具,帮助识别潜在的内存泄漏点。

4. 资源管理

  • 临时增加内存:虽然您提到不限制内存并未解决问题,但在找到根本原因前,可以暂时性地增加服务器的物理或虚拟内存,以避免服务中断。

5. 错误处理与日志

  • 异常捕获:在关键操作前后加入内存使用监控代码(如memory_get_usage()),并适当增加错误处理逻辑,以便更精确地定位问题发生的位置。

注意事项

  • 安全考量:将memory_limit设为-1虽能临时绕过内存限制,但可能导致服务器因单个请求消耗过多资源而变得不稳定,建议仅作为调试手段并在找到根本原因后恢复合理限制。
  • 持续监控:即使问题暂时解决,也应持续监控应用的内存使用情况,以防未来再次出现类似问题。

如果以上步骤均未能解决问题,可能需要更深入地分析应用逻辑或考虑是否存在服务器层面的资源限制问题。您也可以通过ECS一键诊断全面排查并修复ECS问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答