我在 DigitalOcean 上使用 CentOS 6.5 运行一个网站。
正如其他地方所指出的,DigitalOcean 服务器默认配置为没有任何类型的交换,我想知道是否应该添加一个。
我对这些事情的了解足以让我认为答案是“嗯,当然”,但我真的没有超越这一点的基础。
- 当我的系统第一次严重加载用户和内存需求时,它是否会死机?
- 交换是否可以拯救我免于此,但只会带来令人不快的性能损失?
如果您能在这个领域提出任何建议,无论是否针对 DigitalOcean,我们都会非常感激。
答案1
有没有理由在 CentOS 上没有交换文件
是的:
您已经实施了某种类型的水平扩展,可以根据服务器的内存使用情况增加服务器数量,从而消除了使用交换的可能性。
您有一个特定的性能要求,这意味着您不能允许您的程序使用交换进行处理,因为它比内存慢得多,因此,您选择密切监视内存使用情况并根据需要增加内存,而不是使用交换。
当我的系统第一次严重加载用户和内存需求时,它是否会死机?
如果您不知道您的服务器将承受多少负载,并且您没有足够的内存,也没有交换空间,那么您的应用程序将会停止。
交换是否可以拯救我免于此,但只会带来令人不快的性能损失?
正确的。
应用程序停止时究竟会发生什么?哪个应用程序停止?
如果我有 3 个进程,其中 1 个进程正在泄漏内存,那么所有 3 个进程都会死掉吗?还是泄漏内存的那个进程会死掉
?1 个进程会迫使其他 2 个进程死掉吗?
可以这样想:
如果您编写一个程序并告诉程序用无限数量的整数填充一个变量,那么该应用程序很快就会遇到内存错误并退出。
是一样的。无论哪个应用程序尝试访问更多内存以执行其操作,都会失败。因此,如果您还剩下 1 个字节,而您的应用程序创建了一个 32 位整数,则需要 2 个字节,操作会因为内存不足而失败,并且根据应用程序处理内存错误的程度,它将自行修复或退出。
3 个应用程序同时运行也是一样。如果碰巧它们都在系统只剩下 1 个字节内存时请求更多内存,那么从技术上讲它们应该会同时失败。
如果有人发现任何错误,可以纠正我。
答案2
Will swap save me from that, but only by imposing an unpleasant performance hit?
查看有关 swappiness 设置的页面:http://www.scottalanmiller.com/linux/2012/09/03/controlling-swappiness-in-linux/
您可以更改交换性,以便系统不会过于频繁地使用交换空间,从而不会对性能造成太大的影响。
答案3
首先安装 sysstat(如果尚未安装)并监控几天的资源使用情况。运行“sar -r”并经常监控内存使用情况。大多数情况下,内存使用率将接近 90%,请观察“kbcached”和“kbbuffers”列。如果它们使用了大部分内存,则表示应用程序已缓存,因此没有问题。但如果这些值较小,则表示由于实际内存使用量较大导致缓存较少,这也可能表明您的应用程序需要更多 RAM。因此,您可以增加 RAM 或设置交换空间。
现在要进行交换,我相信数字海洋磁盘位于 SSD 上。如果是这样,请设置交换文件,您应该不会看到任何性能损失,因为 SSD 比 HDD 更快。
嗨嗨。