最近,我们注意到由 redis 引起的生产环境中的 CPU 峰值,如下所示:
为了解决这个问题,我每天大约重新启动两次 redis 服务器 :( 这显然远非理想。我想找出根本原因。
到目前为止,我已经研究过以下一些事情:
1) 查看 redis 日志文件中的任何异常情况。以下似乎是可疑的:
2) 研究 nginx 访问日志,看看我们是否遇到异常高的流量。答案是不。
3) New Relic 透露该问题始于 11 月 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
框架:带有 Cm_Cache_Backend_Redis 的 Magento 1.7.2
如果给出上述信息,请告诉我是否可以采取任何措施来减轻 CPU 的高使用率。
非常重要的更新:
您的服务器可能已被黑客入侵。导致 CPU 使用率高的不是 redis,而是一个名为 yam 的单独命令(看看你的 htop 的最右边,我第一次错过了它)。yam 命令用于众所周知的 redis 漏洞利用,通常会导致 CPU 使用率过高。您需要仔细检查以确保您的服务器是安全的。
如果您想了解有关该漏洞以及如何保护自己的更多信息,可以参考以下文章和链接:
这是我关于 magento/redis 的清单,呃,性能问题:
/var/lib/redis
,并确保它相对较小。maxmemory
15GB 的大小,这对于 magento 来说实在是太过分了。我通常使用更接近256mb
. 如果您使用 redis 那么多(!!!!!!),您的 magento 堆栈中可能还有其他问题。一般来说,日志文件并不可疑,因为您的 redis 保存设置告诉 redis 如果写入 > 10000 次,则每分钟保存一次,如果写入次数 > 10 次,则每五分钟一次,如果写入次数 > 1 次,则每 15 分钟一次写。所以它本质上是每分钟将信息持久化回磁盘,这不应该是那么繁重。