迁移后Cakephp内存限制报错,排查Controller
Cakephp memory limit error after migration, troubleshooting Controller
我正在 copying/migrating 将生产服务器 Cakephp 2.3.8 项目转换为开发项目,但我遇到了著名的错误:
Blockquote
Fatal Error
Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 200648563 bytes)
File: /var/www/html/lib/Cake/Utility/String.php
Line: 243
Notice: If you want to customize this error message, create app/View/Errors/fatal_error.ctp
我已经镜像了与生产服务器相同的规格:
- 试图将 apache > php.ini 文件的默认内存限制从 128M 增加到 1024
- 还有1024到2048,但运气不好
- 重新启动服务器和 apache 服务
- 限制我数据库中的数据集(目前有 6 个,但生产服务器在我正在查询的 table 上有大约 40K 行)
- 测试了控制器内部的一个功能,只显示一行文本(成功显示,但致命错误消息不断出现)。
这主要发生在我访问某些控制器时,因为我能够(显然)正确加载某些页面。
我目前正在根据日志文件调试应用程序的行为:
- /ppp/tmp/logs/error.log
- X调试
但是 none 其中显示了致命错误限制的更多详细信息,有人告诉我这可能是内存泄漏,如果两个服务器都以相同的方式限制,那怎么办? (以下服务器的 ulimit)。
我想知道问题是什么,我缺少设置吗?我怎样才能将 Controller 调整为 运行 而不会出错?
开发服务器规格
- Centos 7
- PHP 5.4.16 (cli)(建成时间:2020 年 4 月 1 日 04:07:17)
版权所有 (c) 1997-2013 The PHP Group
Zend Engine v2.4.0,版权所有 (c) 1998-2013 Zend Technologies
使用 Xdebug v2.2.7,版权所有 (c) 2002-2015,Derick Rethans
- VPS 在 Linode 上:2 核 4 GB RAM
- 上限:
核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
挂起信号 (-i) 15076
最大锁定内存(千字节,-l)64
最大内存大小(千字节,-m)无限制
打开文件 (-n) 1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程 (-u) 15076
虚拟内存(千字节,-v)无限
文件锁 (-x) 无限制
生产服务器
- Centos 7
- PHP 5.4.16 (cli)(建成时间:2020 年 4 月 1 日 04:07:17)
版权所有 (c) 1997-2013 The PHP Group
Zend Engine v2.4.0,版权所有 (c) 1998-2013 Zend Technologies
- 专用服务器:16 核(32 线程),128Gb 内存
- 上限:
核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
挂起信号 (-i) 514324
最大锁定内存(千字节,-l)64
最大内存大小(千字节,-m)无限制
打开文件 (-n) 8192
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程数 (-u) 8192
虚拟内存(千字节,-v)无限制
文件锁 (-x) 无限制
提前致谢
更新 1
这是将 lib/Cake/View/Errors/fatal_error.ctp 复制到 app/View/Errors/fatal_error.ctp 并添加后显示的内容
<pre><?php echo h($error->getTraceAsString()); ?></pre>
Fatal Error
Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 126212148 bytes)
File: /var/www/html/lib/Cake/Utility/String.php
Line: 243
Notice: If you want to customize this error message, create app/View/Errors/fatal_error.ctp
July 9th '20 Update
#0 /var/www/html/lib/Cake/Error/ErrorHandler.php(184): ErrorHandler::handleFatalError(1, 'Allowed memory ...', '/var/www/html/l...', 243)
#1 [internal function]: ErrorHandler::handleError(1, 'Allowed memory ...', '/var/www/html/l...', 243, Array)
#2 /var/www/html/lib/Cake/Core/App.php(931): call_user_func('ErrorHandler::h...', 1, 'Allowed memory ...', '/var/www/html/l...', 243, Array)
#3 /var/www/html/lib/Cake/Core/App.php(904): App::_checkFatalError()
#4 [internal function]: App::shutdown()
#5 {main}
在此之前,我正在取出一些组件和助手:
var $helpers=array("Js","Html","Form","Paginator","Fck","Cache","Pagination");
var $components=array("Customcomponent","Paginator","RequestHandler","Cookie","Pagination","Email");
但是运气不好(收到相同的错误消息),我的其他可用控制器不使用助手,仅使用以下组件:
var $components=array("Customcomponent","RequestHandler","Cookie","Email","Pagination","Paginator");
不清楚调用什么 String.php Line: 243
,完整的调用堆栈可能有帮助
将lib/Cake/View/Errors/fatal_error.ctp
复制到app/View/Errors/fatal_error.ctp
并添加
<pre><?php echo h($error->getTraceAsString()); ?></pre>
我正在 copying/migrating 将生产服务器 Cakephp 2.3.8 项目转换为开发项目,但我遇到了著名的错误:
Blockquote Fatal Error Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 200648563 bytes) File: /var/www/html/lib/Cake/Utility/String.php Line: 243
Notice: If you want to customize this error message, create app/View/Errors/fatal_error.ctp
我已经镜像了与生产服务器相同的规格:
- 试图将 apache > php.ini 文件的默认内存限制从 128M 增加到 1024
- 还有1024到2048,但运气不好
- 重新启动服务器和 apache 服务
- 限制我数据库中的数据集(目前有 6 个,但生产服务器在我正在查询的 table 上有大约 40K 行)
- 测试了控制器内部的一个功能,只显示一行文本(成功显示,但致命错误消息不断出现)。
这主要发生在我访问某些控制器时,因为我能够(显然)正确加载某些页面。
我目前正在根据日志文件调试应用程序的行为:
- /ppp/tmp/logs/error.log
- X调试
但是 none 其中显示了致命错误限制的更多详细信息,有人告诉我这可能是内存泄漏,如果两个服务器都以相同的方式限制,那怎么办? (以下服务器的 ulimit)。
我想知道问题是什么,我缺少设置吗?我怎样才能将 Controller 调整为 运行 而不会出错?
开发服务器规格
- Centos 7
- PHP 5.4.16 (cli)(建成时间:2020 年 4 月 1 日 04:07:17)
版权所有 (c) 1997-2013 The PHP Group
Zend Engine v2.4.0,版权所有 (c) 1998-2013 Zend Technologies
使用 Xdebug v2.2.7,版权所有 (c) 2002-2015,Derick Rethans - VPS 在 Linode 上:2 核 4 GB RAM
- 上限:
核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
挂起信号 (-i) 15076
最大锁定内存(千字节,-l)64
最大内存大小(千字节,-m)无限制
打开文件 (-n) 1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程 (-u) 15076
虚拟内存(千字节,-v)无限
文件锁 (-x) 无限制
生产服务器
- Centos 7
- PHP 5.4.16 (cli)(建成时间:2020 年 4 月 1 日 04:07:17)
版权所有 (c) 1997-2013 The PHP Group
Zend Engine v2.4.0,版权所有 (c) 1998-2013 Zend Technologies - 专用服务器:16 核(32 线程),128Gb 内存
- 上限:
核心文件大小(块,-c)0
数据段大小(千字节,-d)无限制
调度优先级 (-e) 0
文件大小(块,-f)无限制
挂起信号 (-i) 514324
最大锁定内存(千字节,-l)64
最大内存大小(千字节,-m)无限制
打开文件 (-n) 8192
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级 (-r) 0
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程数 (-u) 8192
虚拟内存(千字节,-v)无限制
文件锁 (-x) 无限制
提前致谢
更新 1
这是将 lib/Cake/View/Errors/fatal_error.ctp 复制到 app/View/Errors/fatal_error.ctp 并添加后显示的内容
<pre><?php echo h($error->getTraceAsString()); ?></pre>
Fatal Error Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 126212148 bytes) File: /var/www/html/lib/Cake/Utility/String.php Line: 243
Notice: If you want to customize this error message, create app/View/Errors/fatal_error.ctp
July 9th '20 Update
#0 /var/www/html/lib/Cake/Error/ErrorHandler.php(184): ErrorHandler::handleFatalError(1, 'Allowed memory ...', '/var/www/html/l...', 243)
#1 [internal function]: ErrorHandler::handleError(1, 'Allowed memory ...', '/var/www/html/l...', 243, Array)
#2 /var/www/html/lib/Cake/Core/App.php(931): call_user_func('ErrorHandler::h...', 1, 'Allowed memory ...', '/var/www/html/l...', 243, Array)
#3 /var/www/html/lib/Cake/Core/App.php(904): App::_checkFatalError()
#4 [internal function]: App::shutdown()
#5 {main}
在此之前,我正在取出一些组件和助手:
var $helpers=array("Js","Html","Form","Paginator","Fck","Cache","Pagination");
var $components=array("Customcomponent","Paginator","RequestHandler","Cookie","Pagination","Email");
但是运气不好(收到相同的错误消息),我的其他可用控制器不使用助手,仅使用以下组件:
var $components=array("Customcomponent","RequestHandler","Cookie","Email","Pagination","Paginator");
不清楚调用什么 String.php Line: 243
,完整的调用堆栈可能有帮助
将lib/Cake/View/Errors/fatal_error.ctp
复制到app/View/Errors/fatal_error.ctp
并添加
<pre><?php echo h($error->getTraceAsString()); ?></pre>