虚拟服务器冻结(apache?)

虚拟服务器冻结(apache?)

我在 1und1.de 租了一个小型虚拟服务器。(链接,但仅限德语) (2GB RAM 动态,至少 512MB,20 GB HDD) 我选择运行 Ubuntu 8.04 LTS 作为操作系统 (64 位)。我通过 Ubuntu 存储库和后来的 eAccelerator 安装了 apache2 + php5 + mysql。

我运行一些开发内容和一个生产网站。该网站是一种目录,访客很少(每天 250 人),页面很多(大约 7.5k)。每隔几天,服务器就会冻结。这意味着,服务器已启动,可以 ping 通,但任何其他操作都会导致“服务器拒绝连接”。查看管理面板,它显示我的服务器kmemsize太高,并且生成了很多 Apache 进程。

对我来说,似乎我的 apache 消耗了我所有的资源(并且似乎,如果 Google 或其他爬虫开始抓取该页面,这些冻结似乎就会开始)。

然后我尝试避免这种冻结:

  • 我降低了 Apache 配置中的 MaxKeepAliveRequests 和 KeepAliveTimeout
  • 我在 prefork 设置的设置中设置了 MaxRequestsPerChild,以使 Apache 工作者更频繁地清理。

这似乎改善了情况,但冻结仍然发生。

有人知道可以/应该改变什么吗?

解决方案

答案1

弄清楚问题实际上是什么:
在使用 top 或 ps 命令查看实际使用内存的程序之前,请不要开始调优。它可能位于堆栈中的任何位置(Mysql、PHP、Apache)。如果是 Apache...

切换到更轻量的 HTTP 守护进程:
您是否考虑过更轻的 HTTP 守护进程,例如:

考虑使用 Apache 的其他 MPM:
在将其投入生产之前,我会进行大量测试,但您可能需要考虑切换工作器(而不是 perfork)多处理模块(MPM)。 本文据说 dealnews.com 曾使用过这个,它有助于减少内存使用。我还没有在 Ubuntu 上这样做过,但我认为它只是:

sudo apt-get remove apache2-mpm-prefork
sudo apt-get install apache2-mpm-worker

但是你可能要考虑从源代码构建 Apache,这样你就只需要你需要的模块,不过这可能是一个大项目。另外,请记住本文中的以下内容:

这是很重要的一部分。使用 worker 时,不能在 PHP 中使用激进扩展。

调整 PHP:
这篇 IBM Developerworks 文章有一些 php 调整选项可能也有助于减少内存。

调整MySQL:
第三条上面的 IBM Lamp 调优文章讨论了 MySQL 调优。这最终会占用相当多的内存。

相关内容