php一个连接战多少内存不足,致命错误:内存不足,但我确实有大量的内存(PHP)

由于我的问题越来越长,我决定重写整个问题,使其更好和更短。

我在专用服务器上运行我的网站8GB内存。我完全知道,我需要提高对php.ini设置的内存限制。我已经设置从128M到256M和-1。仍然的问题是持久性。

Fatal error: Out of memory (allocated 786432) (tried to allocate 24576

bytes) in D:\www\football\views\main.php on line 81

内存不足没有意义,因为它说只有786432字节被分配,它需要24576字节多。

786432字节只有768千字节,相当小。

提示

>错误发生在一个非常随机的行。它在第81行不总是错误。

>在高峰时间,Apache只需要大约500MB的内存。我还有6GB的空余。

>没有无限循环。

>该脚本需要1,042,424字节。从echo memory_get_peak_usage()获取此数字;

> MySQL的结果集很小(最多12行,纯文本,没有blob数据)

>(重要)如果我每两天重新启动Apache一次,错误消失了。它通常发生在Apache运行超过2天。

>我已经包括分析脚本,你可以得到它here。

>这个专用服务器纯粹用于运行一个网站。这个网站是一个高流量的网站,平均每分钟1000访客。在高峰时段,将有1,700至2,000名访客同时访问。

服务器规格

OS: Windows 2008 R2 64-Bit

CPU: Intel Core i5 – 4 cores

RAM: 8 GB

Apache 2.2

PHP 5.3.1

Storage: 2 x 1 TB hard drives

Bandwidth: 10 TB per month

我终于调整和解决了这个问题,我想在这里分享我做了哪些改进:

> favicon.ico失踪,弄乱了我的路线引擎。虽然我的路由引擎非常小,但通过包括favicon.ico,它有助于通过不运行我的路由引擎减少内存使用。我的网站的大部分有它,我忘了把这个新的部分。

>限制MaxRequestPerChild帮助。在我的其他专用服务器,我有我的MaxRequestPerChild有限。对于这个服务器,我将其设置为0.我一直认为每个脚本是孤立的。让我们说如果我的脚本需要800kb运行。完成后,Apache或PHP应释放800kb内存。它似乎不工作这种方式。有限的MaxRequestPerChild通过在有限的MaxRequestPerChild之后创建新进程和旧进程正在死亡帮助防止内存泄漏。这是我的新设置。

ThreadsPerChild 1500

MaxRequestsPerChild 10000

> ob_flush();确实减少了更多的内存。它不帮助很多,但每一点优化都有帮助。

>我使用xdebug,我从来没有使用过的人试图回答这个问题的建议。我不得不说它是伟大的工具,我已经优化了一些东西,使其运行稍快。

>我已禁用一些不必要的Apache模块。我试图禁用它一个一个,离开它几天测试,以确保它工作完美之前,我禁用另一个。我现在有所有不必要的PHP扩展禁用。

>我的大部分脚本在这个服务器使用传统方式(没有模板,没有数据库层,纯PHP,HTML和旧的mysql_ *函数)。说实话,它运行非常快,使用极小的内存。然而,维护脚本不是很容易,因为网站越来越长。我试图将网站的一些部分转换成适当的框架(我自己的小框架)。之所以使用我自己的框架,是因为它是微小的(整个框架的3kb,并只包括我需要的)。

>切换到IIS7.5完全解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值