我有一个 256MB 内存的小型家用服务器。我的一个网站刚刚在 Reddit 上链接,因为我有两次系统使用过多的内存并且崩溃到我必须手动重启的地步。有时我的物理内存使用率上升到危险的 90%,而我的 mysql 和 apache 服务每个消耗大约 100MB。我怀疑正在发生的事情是大量访问者来了,并且系统在将一些内存移动到交换空间之前使用了太多内存(我有大约 750MB)。这个问题甚至应该发生吗?是获得更多内存的唯一解决方案吗?我听说过 Linux 中的可交换性设置可能会被弄乱,也许这会有所帮助。
有什么建议么?这个问题很烦人。
不要浪费时间进行优化,只需添加 1 GB 内存。256 已经是运行 web 和 mysql 服务器的最低端了。
我很确定您需要手动重置,因为系统正在大量使用您的交换空间。请记住,交换是为了将空闲的长时间运行的进程移到磁盘空间。当您很快再次需要内存时,这被称为“交换垃圾”,这是非常糟糕的。网络服务器永远不应该使用交换。由于其内部缓冲区处理,数据库可能会更好地进行交换。
所以是的,除了增加大约 20 美元来获得更多内存(或花大量时间优化程序)之外,别无他法。
运行 free -m Linux 将使用所有可用的内存和缓存的东西。免费会告诉你是否有问题。
例子
只有 80meg 免费,但其中大部分用于缓存设置,用于从磁盘缓存文件访问。如果您的交换线使用了内存,那么是的,您将需要更多内存。
是的,您需要更多内存来应对这种情况。
您还可以创建一个交换文件来帮助机器跛行,直到您安装更多内存。这不是治愈方法,从交换运行速度很慢- 但它应该阻止机器因内存不足而崩溃,这更糟。
例如制作和使用一个 2GB (2M * 1K) 的交换文件:
如果您希望交换文件在重新启动后仍然存在,还可以将交换文件添加到 /etc/fstab。
当您不再需要它时,请记住交换交换文件并删除它,以恢复使用的磁盘空间。
简短的回答是:是的,您需要更多 RAM。
我认为您的 MaxClients 指令具有很高的价值,而您的服务器无法处理。查看Apache Documentation 中的此文档,如果您有 256MB、1GB 或 4GB 的 RAM,这将很有用。
如果您受到 digg/redit 热潮的冲击,一个选择是爬取您的站点 2 级深度并创建前几页的纯 HTML 副本。这将允许它为大多数访问该站点的用户提供 HTML 而不会触及数据库。
一种选择可能是安装缓存代理,是的,它将使用资源,但会减少您的数据库等的负载(当然取决于您的站点)。
您可能会考虑的另一个解决方案是使用Coral Distribution Network服务。您可以选择在“峰值负载”期间使用它,或者让您的家庭服务器一直这样做。您可以在线查看一些示例 mod-rewrite 规则以分配您的流量。