web-dev-qa-db-ja.com

Redisサーバーの高CPUデバッグ戦略

最近、以下に示すように、redisによって引き起こされる本番環境でのCPUスパイクに気づきました。

enter image description here

この問題に対処するために、私は1日に約2回redisサーバーを再起動しています:(これは明らかに理想からはほど遠いです。根本的な原因を特定したいと思います。

これまでに調べたことがいくつかあります。
1)redisログファイルの異常を調べます。以下は疑わしいようです。

enter image description here

2)nginxアクセスログを調査して、異常に高いトラフィックが発生していないかどうかを確認しました。答えはノーです。

3)New Relicは、問題が16`(約1か月前)の11月21日に始まったことを明らかにしましたが、その頃にコードはリリースされませんでした。

セットアップの詳細は次のとおりです。

Redisサーバー:Redis server v=2.8.17 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=64a9cf396cbcc4c7

PHP:5.3.27fpm付き

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

フレームワーク:Cm_Cache_Backend_Redisを使用したMagento 1.7.2

上記の情報が与えられた場合、CPU使用率の高さを軽減するために私にできることがあれば教えてください。

3
dipole_moment

非常に重要な更新

サーバーがハッキングされた可能性があります。 CPU使用率が高くなる原因は、redisではありませんが、yamと呼ばれる別のコマンドです(htopの右端を見てください。初めて見逃しました)。 yamコマンドは、redisのよく知られたエクスプロイトで使用され、CPU使用率が高くなることがよくあります。サーバーが安全であることを再確認する必要があります。

脆弱性と自分自身を保護する方法について詳しく知りたい場合に参照できる記事とリンクは次のとおりです。


これがmagento/redis、er、パフォーマンスの問題に関する私のチェックリストです:

  1. 3.2などの新しいバージョンのredisを使用していることを確認してください。個人的には、CentOSの場合はIUSリポジトリのredis32uを使用します。
  2. Redisデータベースのサイズを確認してください。/var/lib/redisにある必要があり、比較的小さいことを確認してください。
  3. Redisに十分なRAMがあることを確認してください。 15GBのmaxmemoryを指定しましたが、これはMagentoにとっては本当にやり過ぎです。私は通常、256mbに近いものを使用します。 redisをそれほど使用している場合(!!!!!!)、magentoスタックに他の問題がある可能性があります。
  4. Syscntlでvmオーバーコミット設定が設定されていることを確認してください。 https://redis.io/topics/admin (必要なものの詳細については、このリンクを参照してください)
  5. Redisへの接続数を処理するのに十分なオープンファイル制限があることを確認してください。

一般的に、ログファイルは疑わしいものではありません。redisの保存設定では、10000を超える書き込みがあった場合は1分ごと、10を超える書き込みがあった場合は5分ごと、1を超える場合は15分ごとに保存するようにredisに指示します書く。したがって、基本的には毎分情報をディスクに保持しますが、それほど面倒なことではありません。

3
2ps