Page 1 of 2

Redis - очень медленно

Posted: Mon Nov 04, 2013 11:53 pm
by mad
Создам всё таки тему с вопросом здесь, вместо другого форума, т.к. там тяжело отслеживать последовательность событий по моему вопросу.

Установил redis сервер, модуль redis для php, ну всё как положено.
Конфиг redis дефолтовый, но там всё вроде более менее нормально.

Пробую подключать смарт к редису, вставляю в config.php

$config["redis_host"] = "127.0.0.1";
$config["redis_port"] = "6379";
$config["redis_database"] = 0;
$config["redis_password"] = "";

Сервер запущен и слушает tcp порт.
В админке эта надоедливая надпись "You do not use any modern cache engine..." пропадает

А теперь главное, после подключения redis морда сайта и все страницы сайта, галлеры etc... грузятся адски медленно, доходит до 10-15 секунд затыка перед открытием галлеры или любой страницы.

Вырубаю redis (убираю строчки из config.php) всё работает быстро, т.е. вообще без запинок, включаю redis, все страницы жутко тормозят, именно страницы контента (индекс, категории, галлеры), ссылки на аут при этом работают быстро.

ОС GNU/Linux
Redis server v=2.6.16
phpredis 2.2.4
SmartCJ Pro V 1.50 Build 201309111005

При этом в логах redis вроде всё ок

Сервер в общем загружен не сильно, файловый кэш работает очень быстро.

Для теста убил весь файловый кеш в scj/cache, хожу по сайту открывается все моментально, без единой запинки. При этом, видно в папке scj/cache появляется кеш.

Проделываю тоже самое в redis
Иду в redis-cli делаю FLUSHALL

переключаю смарт на использование redis
Хожу по этому же сайту, страницы открываются 10-15 секунд после клика, это пипец как медленно...

Куда копать? В какую сторону двигаться? Быть может есть какойто пхп скриптик проверить скорость работы redis?

Re: Redis - очень медленно

Posted: Mon Nov 04, 2013 11:54 pm
by admin
Не сталкивался.
Просто добавить кей через пхп в редис быстро работает ?

Re: Redis - очень медленно

Posted: Tue Nov 05, 2013 12:05 am
by mad
В redis есть какой то встроенный бенчмарк, вот запустил из консоли, вроде везде миллисекунды, т.е. сам redis работает быстро, насколько я понимаю.

Code: Select all

[user@server ~]$ redis-benchmark

====== PING_INLINE ======
  10000 requests completed in 0.14 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.51% <= 1 milliseconds
99.76% <= 8 milliseconds
100.00% <= 8 milliseconds
71942.45 requests per second

====== PING_BULK ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.97% <= 1 milliseconds
100.00% <= 1 milliseconds
68027.21 requests per second

====== SET ======
  10000 requests completed in 0.14 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.52% <= 1 milliseconds
100.00% <= 1 milliseconds
72463.77 requests per second

====== GET ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
68027.21 requests per second

====== INCR ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
67114.09 requests per second

====== LPUSH ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
66666.66 requests per second

====== LPOP ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
67567.57 requests per second

====== SADD ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
67114.09 requests per second

====== SPOP ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
66666.66 requests per second

====== LPUSH (needed to benchmark LRANGE) ======
  10000 requests completed in 0.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
65789.48 requests per second

====== LRANGE_100 (first 100 elements) ======
  10000 requests completed in 0.27 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

96.35% <= 1 milliseconds
99.83% <= 2 milliseconds
100.00% <= 2 milliseconds
37313.43 requests per second

====== LRANGE_300 (first 300 elements) ======
  10000 requests completed in 0.54 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

0.13% <= 1 milliseconds
99.21% <= 2 milliseconds
99.95% <= 3 milliseconds
100.00% <= 3 milliseconds
18621.97 requests per second

====== LRANGE_500 (first 450 elements) ======
  10000 requests completed in 0.75 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

0.07% <= 1 milliseconds
88.48% <= 2 milliseconds
99.18% <= 3 milliseconds
99.83% <= 4 milliseconds
99.97% <= 5 milliseconds
100.00% <= 5 milliseconds
13262.60 requests per second

====== LRANGE_600 (first 600 elements) ======
  10000 requests completed in 0.99 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

0.06% <= 1 milliseconds
0.11% <= 2 milliseconds
98.94% <= 3 milliseconds
99.69% <= 4 milliseconds
99.82% <= 5 milliseconds
99.89% <= 6 milliseconds
100.00% <= 7 milliseconds
10131.71 requests per second

====== MSET (10 keys) ======
  10000 requests completed in 0.22 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

37.89% <= 1 milliseconds
100.00% <= 1 milliseconds
46511.63 requests per second

Re: Redis - очень медленно

Posted: Tue Nov 05, 2013 12:10 am
by mad
admin wrote: Просто добавить кей через пхп в редис быстро работает ?
К сожалению в php не силён, можете подсказать код?, если не затруднит =)

Re: Redis - очень медленно

Posted: Tue Nov 05, 2013 12:38 pm
by admin
$redis = new Redis();
$redis->connect($host, $port);
$redis->select((int) $database);
$redis->set($valueID, $value, (int) $lifetime);

Самый короткий вариант, только вывод ошибок включите.

Re: Redis - очень медленно

Posted: Tue Nov 05, 2013 2:35 pm
by mad
ну и как мне этим куском кода проверить скорость redis?
где и как определять переменные $host, $port, $database?

Если бы я умел писать код на пхп, я бы здесь не писал такие вопросы, Вам не кажется?

Re: Redis - очень медленно

Posted: Tue Nov 05, 2013 5:53 pm
by admin
хм... где у вас стоит редис я тоже не знаю, вам не кажется что если б я был кашпировским я б просто проясновидел сразу все ?

Если не знаете где у вас стоит это - спросите админа, покажите ему код - он сможет проверить..

Re: Redis - очень медленно

Posted: Wed Nov 06, 2013 11:27 am
by mad
Что значит где стоит редис? Я приводил выше кусок смартовского config.php из которого понятно что редис стоит на локалхосте, и работает через tcp на порту 6379, совсем не обязательно быть Анатолием Кашпировским чтоб понять это.

И что я могу проверить куском кода что Вы дали? Складывается впечатление что Вы его дали лижбы от Вас отстали...

$redis = new Redis();
$redis->connect($host, $port);
$redis->select((int) $database);
$redis->set($valueID, $value, (int) $lifetime);

Ну понятно:
Коннектимся к редису
Выбираем базу
Добавляем в кэш чтото

Что этим проверяется? Работает редис вообще или нет? Я же говорил, он работает, но работает очень медленно.

При настройке смарта на работу с редис, если зайти в redis-cli и выполнить monitor то видно там адские строки работы, SET GET и прочее..

Можно проверить время добавления в кеш и время вынимания из кеша данных, средствами php? Вот что я просил у вас.

Сам редис работает быстро, это видно из redis-benchmark который я приводил вам выше, 10000 запросов выполняется меньше чем за секунду, тут как мне кажется проблема в phpredis или в смарте.

Re: Redis - очень медленно

Posted: Wed Nov 06, 2013 11:38 am
by admin
Ok скидывайте фтп, я в понедльник разберусь.

Re: Redis - очень медленно

Posted: Mon Nov 18, 2013 4:03 pm
by mad
Может кому-то будет интересно, проблема решилась после исследования поддержкой смарта и обновления скрипта.