Назад | Перейти на главную страницу

Стратегии отладки Redis server high cpu

Недавно мы заметили скачки загрузки ЦП в нашей производственной среде, вызванные redis, которые можно увидеть ниже:

Чтобы решить эту проблему, я перезапускаю сервер redis примерно два раза в день :( что явно далеко от идеала. Я хотел бы определить основную причину.

Вот некоторые вещи, которые я изучил до сих пор:
1) Посмотрите на любые аномалии в файле журнала Redis. Следующее кажется подозрительным:

2) Изучил журналы доступа nginx, чтобы узнать, нет ли у нас необычно высокого трафика. Ответ - нет.

3) New Relic обнаружил, что проблема началась 21 ноября 16` года (около месяца назад), но в то время не было выпущено никакого кода.

Вот некоторые подробности о нашей настройке:

Сервер Redis: Redis server v=2.8.17 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=64a9cf396cbcc4c7

PHP: 5.3.27 с fpm

Конфигурация Redis:

daemonize yes
pidfile /var/run/redis/redis.pid
port 6379
timeout 0
tcp-keepalive 0
loglevel notice
logfile /var/log/redis/redis.log
syslog-enabled yes
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename redis.rdb
dir /var/lib/redis/
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 15GB
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
include /etc/redis/conf.d/local.conf

Фреймворк: Magento 1.7.2 с Cm_Cache_Backend_Redis

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

ОЧЕНЬ ВАЖНОЕ ОБНОВЛЕНИЕ:

Ваш сервер мог быть взломан. Не redis вызывает высокую загрузку ЦП, а отдельная команда под названием yam (взгляните на крайний правый угол вашего htop, я пропустил ее в первый раз). Команда yam используется в хорошо известном эксплойте Redis и часто приводит к высокой загрузке процессора. Вам нужно перепроверить, чтобы убедиться, что ваш сервер безопасен.

Вот несколько статей и ссылок, к которым вы можете обратиться, если хотите узнать больше об уязвимости и о том, как обезопасить себя:


Вот мой контрольный список для проблем с производительностью magento / redis, э ...

  1. Убедитесь, что вы используете новую версию redis, например 3.2, я лично предпочитаю redis32u из репозитория IUS, если вы используете CentOS.
  2. Проверьте размер вашей базы данных Redis, он должен быть в /var/lib/redisи убедитесь, что он относительно небольшой.
  3. Убедитесь, что у вас достаточно оперативной памяти для Redis. Вы указали maxmemory 15 ГБ, что для magento действительно перебор. Я обычно использую что-то ближе к 256mb. Если вы так часто используете redis (!!!!!!), у вас, вероятно, есть другие проблемы в вашем стеке magento.
  4. Убедитесь, что в syscntl установлен параметр overcommit vm. https://redis.io/topics/admin (подробнее о том, что вам нужно, см. по этой ссылке)
  5. Убедитесь, что у вас достаточно лимитов открытых файлов для обработки количества подключений к redis.

Вообще говоря, файл журнала не вызывает подозрений, потому что ваши настройки сохранения redis говорят redis сохранять каждую минуту, если было> 10000 записей, каждые пять минут, если было> 10 записей, и каждые 15 минут, если было> 1. написать. Таким образом, по сути, информация сохраняется на диск каждую минуту, что не должно быть таким обременительным.