bigton
@bigton
Web-программист

Как оптимизировать Redis-сервер для высокой нагрузки?

Добрый день.

Сервер: Intel® Core™ i7-3930K 6 ядер, 64 GB DDR3 RAM, 2 x 3 TB 6 Gb/s HDD SATA3
ОС (uname -a): Linux *** 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linux
Redis сервер 2.8.19

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

Какие попытки оптимизации сервера я предпринял:
cat /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
ulimit -n 100032
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

cat /etc/sysctl.conf
vm.overcommit_memory=1
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=32768
fs.file-max=100000

cat /etc/redis/redis.conf
tcp-backlog 32768
maxclients 100000

Какие то настройки я нашел на redis.io, какие то в блогах.

Тесты
redis-benchmark -c 1000 -q -n 10 -t get,set
SET: 714.29 requests per second
GET: 714.29 requests per second

redis-benchmark -c 3000 -q -n 10 -t get,set
SET: 294.12 requests per second
GET: 285.71 requests per second

redis-benchmark -c 6000 -q -n 10 -t get,set
SET: 175.44 requests per second
GET: 192.31 requests per second


При увеличении числа клиентов уменьшается скорость обработки запросов и, самое ужасное, Redis-сервер перестает обрабатывать входящие запросы и на PHP серверах появляются десятки исключений вида
Uncaught exception 'RedisException' with message 'Connection closed' in [no active file]:0\n
Stack trace:\n
#0 {main}\n  thrown in [no active file] on line 0


Что делать? Что еще оптимизировать? Сколько вообще такая машина может потянуть клиентов?

Спасибо!
  • Вопрос задан
  • 6101 просмотр
Пригласить эксперта
Ответы на вопрос 2
oshikuru
@oshikuru
Python-разработчик, не брезгую js / html / css
Копайте в сторону Redis cluster
Ответ написан
Комментировать
mgyk
@mgyk
Проверьте все же ulimit
cat /proc/PROC_ID/limits

У меня на ноуте без оптимизаций бенчмарк дает лучшие результаты
redis-benchmark -c 3000 -q -n 10 -t get,set
SET: 322.58 requests per second
GET: 357.14 requests per second
Ответ написан
Ваш ответ на вопрос

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

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