我工作的一个PHP的Web应用程序,它可以让用户彼此,书活动网络化,信息海誓山盟。这里只有大约100个用户。

我设置上的VPS应用与Ubuntu 9.10,apache2的,MySQL的5和PHP 5.我的RAM 360 MB,但是升级到720 MB。

由于过度存储器使用最近,我的web应用程序已经经历中断。从我可以在错误日志告诉,似乎服务器自动杀死占用太多内存Apache进程。其结果是,我升级存储器360从MB到MB 720作为权宜之计。

所以我的问题是,我该如何去解决这些问题,停电?我怎么知道,如果我的网站更多的内存需求是由于不良的代码,或者如果它是该网站的自然增长的一部分吗?什么是最有效的方法来确定哪些PHP脚本消耗的内存最多?

有帮助吗?

解决方案

有没有简单的答案,但我会怀疑它可能在你的代码中的问题。

什么是memory_limit的在php.ini文件中设置?通常,我建议至少4MB,通常16多少个并发命中你调遣?是网站做了很多统计的繁重的报告吗?或通过PHP图像渲染?你使用的file_get_contents()地方?

您真的需要设置一些自定义的日志报告为每个URL,在出口处的日志文件的大小。例如你可以自动在前面加上:

<?php
register_shutdown_function('log_mem');

function log_mem()
{
   fputs(STDERR, '[' . date('c') . '] ' . memory_get_usage() . ' ' 
     . $_SERVER["REQUEST_URI"] . "\n");
}

(注 - 没有结束标签) 这将写出用于通过在每次PHP页到的error_log存储器,以便可以更容易地隔离问题。

HTH

下进行。

其他提示

如果你的程序尺寸小,你可以做的另一件事是拒绝你的httpd设置有1分钟的备用服务器,以及3最大备用服务器,如果你只有100个用户,这应该是正常,因为你赢了“T关心开始流程,只有几个用户的开销。

下面是一种支持剖析PHP的工具: http://xdebug.org/docs/profiler

根据你的httpd及PHP,httpd的可持有的内存,它不需要段,以及不必要的成长正在运行的进程大小的版本。我有一个盒子,这样做,我已经通过像这样每晚的基础上做一个重新开始的httpd解决这个问题:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

正如你所看到的,我跟进我的重启3周落后开始,以防万一阿帕奇失败重新启动后起死回生。 3可能是矫枉过正,但另一方面,它不会伤害任何东西,那么为什么不。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top