这问题与此主题有关,但在 64 位 Linux 上运行时,我有一组数据缓存 JVM,并且想要一个大型 Web 缓存。目前,每个缓存都配置为大致适合系统内存(24GB),并以 LRU 方式持久保存到磁盘。
我很好奇,如果我们过度分配缓存进程并为高优先级 Linux 交换设置 SSD,性能会如何。我想知道 Linux 内核是否比我们简单的 LRU 进程更智能/更快?
我担心过度分配 JVM 堆,并让内核交换堆页面,因为 GC 必须定期遍历上述页面。
答案1
我认为 SSD 不适合用作交换分区,因为其性能会随着大量写入而逐渐下降。这是因为 SSD 的写入寿命有限,因此人们会想尽各种办法来尽量减少单个扇区的重写次数。
答案2
恐怕我不同意其他回复。是的,SSD 只能承受 100K 左右的写入。对于 100GB 驱动器,这意味着写入 10^16 字节,或 3000 年内 100MB/s 的稳定流。即使负载平衡非常糟糕以至于您只能获得其中的 1%......好吧。此外,性能下降通过丢弃支持得到解决,现代驱动器在使用过程中不会明显下降。
是的,拥有更多服务器和 RAM 确实更好,但如今你可能只需花费 200 美元就能获得 100GB 的 SSD,而拥有 100GB RAM 的服务器则需要花费该价格的 100 倍左右 - 仅 RAM 成本。功耗也可能是其 100 倍。
我认为 SSD 非常适合交换,从少数 IOPS 到数万 IOPS 正是您所需要的。但是:我只是在这里发表意见 - 我很想看到基于 SSD 交换的真实数字。
编辑:回答 OP,我同意内核可能比你更聪明(没有冒犯!:-),所以你也可以尝试用你的旧旋转磁盘进行过度分配。
答案3
我猜你的性能不会随着成本和努力而增长。我的直觉告诉我,如果你能以合理的方式划分数据缓存,那么使用装满 RAM 的额外服务器可能会好得多。
SSD 在检索数据时具有接近零延迟(相对而言)的优势,但将其与主存储器或网络连接的各种总线会大大降低其速度。
答案4
现在让我们看看:
100GB x 100K 写入 = 10000TB 可写入 SSD。10000TB/100MB/s = 10Ms,直到 SSD 磨损。10Ms = 2778h = 116days 假设我们有一个超级控制器,可以消除几乎所有热点,并且我们得到 90 天......
90 天 != 3000 年