Как решить проблему с ошибкой "ERR_EMPTY_RESPONSE, которая предположительно возникает из-за open_file_cache?

Физически сервер находится рядом с моим компьютером. На сервере с Debian с установленым Nginx. php-fpm тоже установлен, он не причем, так как проблема возникает при обращении даже к html файлам.
Пользуюсь браузером Chrome, другим браузером не тестил.

При обращении к файлу index.html иногда получаю ошибку "ERR_EMPTY_RESPONSE". Все это я могу наблюдать примерно пару раз в день. При обновлении файла на сервере, обновляю страницу Ctrl+F5 и получаю ошибку, затем через 15-20 секунд страница подгружается и работает дальше нормально.

В логе nginx, есть ошибка вида:
2018/08/31 21:48:34 [alert] 12177#0: *7103 pread() read only 6570 of 6574 from "/var/www/XXXXXXXXXX/www/index.html" while sending response to client, client: 192.168.5.1, server: XXXXXXXXX, request: "GET /index.html HTTP/1.1", host: "XXXXXXXXXXX"


где XXXXXXXX - домен сайта, а 192.168.5.1 - ip-адрес роутера, через который подключен сервер и компьютер к Интернету.
Подобную проблему обсуждали тут: https://serverfault.com/questions/547421/pread-rea...
и тут: www.scalescale.com/tips/nginx/nginx-pread-read-onl...

в проблеме винят open_file_cache.
В конфиге Nginx есть строки:
open_file_cache max=200000 inactive=20s; # max количество файлов, информация о которых будет содержаться в кеше
open_file_cache_valid 30s; # через какое время информация будет удалена из кеша
open_file_cache_min_uses 2; # Будет кешировать информацию о тех файлах, которые были использованы хотя бы 2 раза
open_file_cache_errors on; # Будет кешировать информацию об отсутствующих файлах


Проблема наблюдается как раз 20-30 секунд, т.е. совпадает с настройками open_file_cache.

Есть предложения как это победить, кроме как не использовать open_file_cache?
  • Вопрос задан
  • 1272 просмотра
Решения вопроса 1
Tolly
@Tolly Автор вопроса
Решил углубится в тему, вот результаты:

Директива open_file_cache применяется для кеширования информации о статических файлах: js, css, jpeg, html,..
Если файл не существует, или не прав на чтение, то эта информация также может хранится в кеше.
По умолчанию: open_file_cache off;

Пример с описанием:
# Информация о 1000 файлов, может хранится в кеше. Если не было активности к файлу в течение 5 мин, то информация о нем удаляется из кеша
open_file_cache max=1000 inactive=5m;  

# Активностью считается обращение к файлу хотя бы 2 раза. В кеш они также попадают, если было хотя бы 2 обращения к файлу
open_file_cache_min_uses 2;             

# Вся информация о файлах в кеше обновляться раз в 1 минуту
open_file_cache_valid 1m;               

# Сохранять ли информацию об ошибках, например, если файла, к которому вы обратились - нет, то это будет тоже в кеше, информация тоже обновится через 1 мин
open_file_cache_errors on;


При работе со статическими файлами, когда они изменяются, например верстке.
На время работ желательно отключать open_file_cache, либо параметр open_file_cache_min_uses делать достаточно большим, чтобы файл не попадал в кеш, но это фактически тоже самое что и отключить open_file_cache.

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

При работе с файловой системой NFS, рекомендуется не включать open_file_cache, так как информация о файлах может не обновляться даже после open_file_cache_valid.

Написал, а то может кому интересно будет или я забуду :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы