Есть прямо таки мистическая проблема с redis, который периодически возвращает ошибку Redis server went away.
Дано:
- 1 виртуальный сервер - 2 ядра (процессор IntelXeon E5-2670), 8Гб оперативной памяти, debian 8
- на сервере стоит Redis 3.2.9
- нагрузка на Redis крайне небольшая:
Периодически клиенты redis (php7, extension -
https://github.com/phpredis/phpredis) получают ошибку
Redis server went away. Закономерности ошибок не найдено.
Как правило, клиенты получают такую ошибку при попытке первый раз соединиться с Redis.
Что пытался сделать:
- отключил aof и rdb полностью. Проверил через логи - снапшоты прекратились. Но это не помогло.
- дальше пытался тюнить сам Redis:
-- maxmemory = 6Gb
-- timeout = 60
-- tcp-backlog=65000
-- maxclients = 100000
-- tcp-keepalive = 60
-- maxmemory-policy = allkeys-lru
- потом пытался тюнить систему:
-- /proc/sys/fs/file-max = 817894
-- /proc/sys/net/core/somaxconn = 65000
-- vm.overcommit_memory=2
-- vm.overcommit_ratio = 100
-- net.ipv4.tcp_max_syn_backlog=5000
-- limits:
- потом решил посмотреть redis slowlog. Подключил slave и все тяжелые запросы вынес на него.
Сейчас в slowlog настроен как slowlog-log-slower-than=5000 (5мс) и он пустой. Если уменьшить его до 500 (0.5мс), то появляются команды get\exists\smembers. (хотя exists по идее не должен быть таким долгим, но в slowlog иногда он попадает со значениями 600-1000 (0.6-1мс))
В итоге это все не помогло.
Из нюансов:
- сейчас в php для redis указан timeout в 1 секунду. C данным timeout и при постоянной однотипной нагрузке, redis может как без ошибок в течении 1 часа работать, так и кидать ошибки по 2-10 в час. Если timeout уменьшить до 0.5, то количество ошибок возрастает. При этом пинг от клиента до сервера redis - 0.6-1 мс
- redis-benchmark показывает хорошую картинку:
- пробовал написать скрипт на php, который через fork создает 1000 клиентов по 500 команд incr каждый. Так вот
почти всегда скрипт отрабатывает без проблем, но периодически и он дает ошибки.
Куда дальше копать - ума не приложу. Может у кого-то есть идеи или кто-то сталкивался с подобным?