Назад | Перейти на главную страницу

Загрузка свыше 1 ГБ на один сервер Linux

У меня есть популярный веб-сервер nginx на CentOS, который предоставляет статический большой контент. когда количество одновременных подключений невелико, сервер может легко обеспечить до 4 Гб трафика, но когда количество одновременных подключений увеличивается, производительность сервера резко падает до 400 Мб при 100% использовании ввода-вывода. Я пробовал кэширование SSD, монтирование файловой системы с noatime, изменение планировщика ввода-вывода, увеличение памяти сервера до 256 ГБ, другую конфигурацию на nginx, такую ​​как aio, отправку файлов, но безуспешно. есть ли какая-нибудь другая конфигурация для улучшения его производительности?

Я полагаю, что когда вы обслуживаете небольшое количество клиентов, ваш сервер может кэшировать большую часть необходимых данных в ОЗУ, поэтому он обслуживает их почти исключительно из ОЗУ.

Но когда обслуживается все больше и больше клиентов, большая часть данных не умещается в вашей оперативной памяти, и вашему серверу необходимо читать их из вашей подсистемы ввода-вывода. Кэш используется гораздо реже, поскольку большую часть времени необходимых данных просто нет. А механических приводов нужно было бы много искать.

Я не знаю, сколько у вас данных и как настроен ваш ввод-вывод, но я думаю, что механических приводов будет недостаточно. Также любой SSD-кеш меньше, чем данные, которые вы используете.

Вы можете использовать несколько SSD с высокой производительностью произвольного чтения в RAID1. Или, может быть, вы могли бы «сегментировать» свои данные - вместо использования одной огромной файловой системы разделить ваши файлы на большое количество небольших SSD-дисков, например, на основе crc32(filepath) % 8 для 8 SSD.

А как насчет создания ramdisk и размещения на нем контента? Вы можете запустить rsync для резервного копирования данных на физический диск и предотвращения потери данных.