linux – 内存管理“很好”

前端之家收集整理的这篇文章主要介绍了linux – 内存管理“很好”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在问题之前,我给你一些背景知识:我在VPS上运行一个网站. VPS itselmf运行apache web服务器,PHP代码生成带有acite到sqlite DB的页面,并运行由cron作业触发的一些后台任务.

这些后台任务主要更新数据库值,并添加显示给网站用户的新记录.

性能方面,网站的响应性是一个优先事项,但后台任务不是时间敏感的,如果它们必须被取消,放慢速度,那么根本没有问题…….考虑到我没有那么多的访问量(每天大约4000页的浏览量,其中大多数都是缓存的),我可以负担得起低优先级的那些,他们仍然可以完成工作. cpu智能,我运行apache的“niceness”为0(默认值),后台任务的“niceness”从10到18.一切都很好.

内存是一个问题,因为其中一些任务具有高内存占用.其中一些实际上崩溃了,因为当他们需要时没有足够的内存.
通常发生的事情是:

>触发高内存消耗任务1
>用户访问网站=>任务1被延迟(我没有遇到任何问题)
>任务1恢复
>触发高内存消耗任务2.由于延迟,任务1未完成
>用户访问网站=>两个任务都延迟了(仍然没有问题)
>任务1恢复并需要更多内存=>没有内存,任务1崩溃
>任务2完成
>用户访问该网站
> ……

VPS在1千兆位RAM系统上运行,目前没有定义SWAP.
我认为添加一个SWAP空间(免费,因为它不会花费我更多),可能是我的问题的一个很好的解决方案.在上面描述的事件过程中,后台任务使用的一些内存可能会被交换,从而降低了这些任务的性能,但话说回来,我没有任何问题.

我想避免的是交换apache内存,因为它会降低网站对最终用户的响应能力.就像我用“很好”表示apache比backgroudn任务更重要.如果您看到我的问题的另一个解决方案,欢迎您提出任何建议.我也在改进后台任务以减少内存占用,但这需要一些时间.

解决方法

您可以使用cgroup来执行此操作.它允许您设置内存和内存交换的限制,因此您可以强制进程交换.

或者它也可以让你独立调整每个cgroup的swappiness,这样你就可以增加你的背景页面被换掉的几率:

http://www.kernel.org/doc/Documentation/cgroups/memory.txt

猜你在找的Linux相关文章