【发布时间】:2014-04-04 02:15:50
【问题描述】:
在我大约一个月前的 php 错误日志中,我看到一个错误
PHP Fatal error: Out of memory (allocated 524288) (tried to allocate 311296 bytes) public_html/index.php on line 347
这很奇怪,因为错误说它只分配了 524288,这将是 512 KB 错误和往常一样,只发生在这行脚本上,我每天会收到大约 10-20 次这个错误
在 index.php 中,我包含了 4-5 个脚本,并且在那一行 (ln 347) 上只有返回一些 css 代码并且没有 无限循环
看了很多题目,把mempry_limit改为256M,在apache中添加了RLimitMEM 173741824 247483648和MaxRequestsPerChild 9000
在我的测试中,我使用这样的代码
if($_SERVER['REMOTE_ADDR'] == $my_IP)
{
var_dump(memory_get_usage());
var_dump(memory_get_peak_usage());
}
在脚本的开头和结尾处:
int(729812) int(741124) - int(915952) int(953968)
我有一个安装了 php 5.3.22 和 1.5 GB ram 的 vps,其中大多数时候 200-500 mb 是免费的,我有一些关于 每天 20,000 次点击可能更多,服务器负载有时会在一段时间内达到 8 次
网站速度很快,速度没有问题
在根目录中有 3-4 个 php 文件也可供公众访问,但在错误日志中我看不到它们,尽管它们没有像 index.php 那样命中
在我的本地主机中,我安装了 x-debug 和 win 缓存研磨,当我分析 index.php 脚本时,我也没有发现任何问题
在这个 vps 上,我还安装了 wordpress,它也会出错,但至少他可以分配的内存量更多,其中一个错误是这样的:
PHP Fatal error: Out of memory (allocated 9961472) (tried to allocate 7 bytes) in /public_html/blog/wp-includes/canonical.php on line 157
对于 wordpress,我在 htaccess 中设置了 memory_limit 256M
我还安装了 livezilla,它也会出错
PHP Fatal error: Out of memory (allocated 524288) (tried to allocate 77824 bytes) in public_html/support/_lib/functions.global.inc.php on line 520
对于 livezilla,我还在 htaccess 中设置 memory_limit 256M
我应该提到,在我的 vps 中,我托管了 5-6 个其他网站
有一次我在 phpMyAdmin 中遇到了这个错误,上面写着:
PHP Fatal error: Out of memory (allocated 524288) ...
再次只分配了 524288
我一遍又一遍地重新启动 apache,但没有任何改变
错误日志中的行号是否会因为在该行之前包含其他脚本而出错?
可能是cpu问题?
我正在为这个错误苦苦挣扎大约 2 个月,我不知道还能做什么 有什么想法吗?
【问题讨论】:
-
这是直接退出。您每天获得 20,000 次点击,同时获得多次点击会消耗您当前允许 apache fork 消耗的所有内存,考虑到其他运行实例的剩余内容。
-
真正的问题是,你在写什么样的代码?这通常是由于死循环、对象实例化不正确等造成的。
-
可能是您正在运行带有 suhosin 强化扩展的 php? suhosin 复制了一些 php 配置选项,memory_limit 就是其中之一。