我在 CentOS 上有一个高访问量的 nginx Web 服务器,它提供静态大型内容。当并发连接数较低时,服务器可以轻松提供高达 4Gb 的流量,但是当并发连接数增加时,服务器性能急剧下降到 400Mb,I/O 利用率为 100%。我尝试过 SSD 缓存、使用 noatime 挂载文件系统、更改 I/O 调度程序、将服务器内存增加到 256GB、在 nginx 上使用不同的配置(如 aio)、文件发送,但均未成功。还有其他配置可以提高其性能吗?
答案1
那么创建一个 ramdisk 并将内容放在那里怎么样?您可以运行 rsync 将数据备份到物理磁盘并防止数据丢失。
答案2
我认为,当您服务的客户端数量较少时,您的服务器能够在 RAM 中缓存大部分所需数据,因此它几乎完全通过 RAM 提供服务。
但是当服务的客户越来越多时,大多数数据都无法放入 RAM 中,服务器需要从 IO 子系统读取数据。缓存的使用率要低得多,因为大多数时候所需的数据都不存在。而且机械驱动器需要进行大量寻道。
我不知道您有多少数据,以及您的 IO 是如何配置的,但我认为机械驱动器根本不够用。此外,任何小于您使用的数据的 SSD 缓存都是不够的。
您可以在 RAID1 中使用多块具有高随机读取性能的 SSD。或者,您可以“分片”数据 - 而不是使用一个庞大的文件系统,而是将您的文件拆分到大量小型 SSD 磁盘上,例如基于crc32(filepath) % 8
8 块 SSD。