Помимо 1 Гб загрузки на одном сервере Linux

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам