在问题之前,我给你一些背景知识:我在VPS上运行一个网站。 VPS itselmf运行apache web服务器,PHP代码生成带有acces的页面到SQLite数据库,并运行由cron作业触发的一些后台任务。
这些后台任务主要更新数据库值,并添加新的logging显示给网站用户。
性能方面,网站的响应速度是一个优先事项,但是后台任务不是时间敏感的,如果必须重用,放慢速度,那么根本就没有问题。 考虑到我没有那么多的访问量(每天大约4000页的浏览量,其中大部分都是caching的),我可以负担得起低优先级的那些,他们仍然可以完成这项工作。 CPU聪明,我运行Apache的“不错”0(默认),和后台任务有一个从10到18“好”。一切都很好。
内存是一个问题,因为这些任务中有一些具有较高的内存占用。 其中一些实际上是因为没有足够的内存而需要时崩溃。 通常发生的是:
VPS在1G的RAM系统上运行,目前没有定义SWAP。 我认为,增加一个SWAP空间(免费,因为它不花我更多),可能是一个很好的解决我的问题。 在上述事件的过程中,后台任务所使用的一些内存可以被交换,从而降低了这些任务的性能,但是我再也没有问题了。
我想避免的是将apache内存交换,因为这会降低网站对最终用户的响应速度。 就像我用“nice”表示的那样,apache比backgroudn任务更重要。 如果你看到我的问题的另一个解决scheme,欢迎任何build议。 我也正在改善后台任务,以减less他们的内存占用,但这是花了一些时间。
你可以使用cgroups来做到这一点。 它可以让你设置内存和内存+交换的限制,所以你可以强制进程交换。
另外,它也可以让你独立调整每个cgroup的swappiness,所以你可以增加你的背景页面被换出的几率: