Я размещаю все свои загруженные файлы на хранилище NAS (glusterfs).
Недавно я обнаружил, что на NAS наблюдается огромный и постоянный сетевой трафик. Я проследил его до запросов Discourse на оптимизированные изображения. Существует ли задача, которая постоянно ищет эти изображения? Почему? И как её отключить?
Возможно, это фоновая задача, которую добавил @david для поиска основного цвета изображения.
Она в конечном итоге завершится, и система вернется в стабильное состояние.
Нам нужно обработать все изображения в рамках этой фоновой задачи. Вы можете обойти это, принудительно установив белый цвет (или другой) для всех изображений.
она обрабатывает 25 изображений за 15 минут. Так? Это должно быть совершенно незначительно. Я наблюдаю, что тысячи файлов запрашиваются каждую минуту.
Кроме того, глядя на трафик за последние шесть месяцев, я вижу такое же поведение. Поэтому я думаю, что причина в чём-то другом.
Однако я почти уверен, что это делает какая-то задача Discourse или что-то подобное, потому что когда я останавливаю приложение Discourse, трафик исчезает. Но когда я останавливаю только nginx для Discourse, трафик всё ещё сохраняется.
Вся наша фоновая логика выполняется в задачах Sidekiq. Если задача не запущена, но у вас всё ещё наблюдается высокая нагрузка на дисковый ввод-вывод, возможно, это связано с посещением вашего сайта пользователями и отдачей изображений через nginx?
Используете ли вы CDN с кэшированием для раздачи статических ресурсов?
Вам потребуется использовать инструменты инспекции Linux, чтобы точно увидеть, какие именно идентификаторы процессов (PID) и системные вызовы будут использоваться.
Сначала я перезапустил приложение Discourse, чтобы остановить постоянный трафик. Затем я перешел в панель администратора и открыл раздел для массовых отчетов. Отчеты здесь уже давно не отображаются корректно:
Думаю, вычисление используемого пространства в папке NAS с большим количеством файлов потребовало бы очень много времени и было бы корневой причиной высокого потребления полосы пропускания.
А, понятно. Результат этого отчёта кэшируется, но, похоже, он никогда не завершается и не может быть закэширован, потому что ваш сетевой диск работает слишком медленно.
Значит, есть ли что-то, что мы можем сделать, чтобы предотвратить это? Например, относиться к этому как к загрузкам в S3, где мы не вычисляем размер на диске