我在1und1.de租用一个小型虚拟服务器。 ( 链接,但只有德语 )(2GB RAMdynamic,至less512MB,20 GB硬盘)我select运行Ubuntu 8.04 LTS作为操作系统(64位)。 我通过Ubuntu存储库和后来的eAccelerator安装了apache2 + php5 + mysql。
我运行一些开发的东西和生产网站。 这个网站是一个目录,有几个访问者(每天250)和很多页(约7.5k)。 每隔几天,服务器就会冻结。 这意味着,它已经启动,可以被ping通,但是其他任何操作都会导致“服务器拒绝连接”。 看着pipe理面板,它说我的kmemsize是很高的,也有很多的apache进程产生的。
对我来说,似乎我的apache会占用我所有的资源(而且似乎是,如果Google或另一个爬虫开始抓取页面,这些冻结似乎就开始了)。
然后我试图避免这个冻结:
这似乎改善了情况,但仍然冻结正在发生。
任何人有什么想法可以/应该改变?
解决scheme
找出问题实际上是:
不要开始debugging,直到使用top或ps命令来查看实际使用的内存。 它可以在堆栈中的任何地方(Mysql,PHP,Apache)。 如果是Apache …
切换到更轻的HTTP守护进程:
你是否考虑过轻量级的HTTP守护进程,例如:
考虑与Apache不同的MPM:
在将其投入生产之前,我会对此进行很多testing,但是您可能会考虑切换工作人员(而不是perfork)多处理模块(MPM)。 这篇文章说这是在dealnews.com使用,它有助于内存使用。 我还没有用Ubuntu做过这个,但是我认为这只是:
sudo apt-get remove apache2-mpm-prefork sudo apt-get install apache2-mpm-worker
但是,您可能要考虑从源代码构buildApache,因此您只需要拥有所需的模块,但这可能是一个大项目。 另外,从文章中记住:
这是一个重要的部分。 在使用worker时,不能在PHP中使用根部扩展。
调整PHP:
这篇IBM Developerworks文章有一些php调优选项,可能也有助于减less内存。
调整MySQL:
上面的IBM Lampdebugging文章中的第三篇文章讨论了MySQL调优。 这最终可能会使用相当多的内存。