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

Почему сервер пишет гораздо больше, чем читает диск

Я использую одно приложение Ruby on Rails, я использую Passenger Nginx, Ruby on Rails 3.2, поисковый гем Sunspot (который использует Solr в качестве своей поисковой системы). Мое приложение работает нормально с примерно 6 тысячами активных пользователей, но когда наблюдается всплеск трафика, например, 15 тысяч активных пользователей, это неприемлемо медленно. Я проверил журналы newrelic и увидел использование ввода-вывода, но не понимаю.

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

Большинство запросов GET обслуживаются из памяти. Однако запись в журналы, вероятно, приводит к вводу-выводу, потому что журналы обычно буферизируются по строкам, и каждая запись в журнале обычно является строкой.

Если ваша проблема связана с записью в журнал (согласно предложению Дэвида), то ее можно легко решить в новом nginx, включив буферизацию access_log записывает и использует сжатие gzip на лету (вместе с буферизацией) или, в качестве альтернативы, использует файловую систему, такую ​​как zfs, которая может делать некоторые из этих вещей автоматически без вашего участия.

access_log /path/to/log.gz combined gzip flush=5m;

Кроме того, ваша проблема может быть связана с тем, как работает кеширование nginx (в частности, значение по умолчанию proxy_buffering on; и тому подобное).

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

В зависимости от ваших ресурсов вы можете подумать о настройке диска с памятью в качестве каталога для буферизации ваших материалов. В противном случае вы также можете подумать о настройке лак перед вашим nginx - varnish выполняет все кэширование через подсистему виртуальной памяти.