早晨起来,想登录博客,记录下自己的灵感,突然发现死活登录不上 WordPress 后台。
登录到 VPS 后台,发现没有出现我之前常出的问题 — 硬盘满了。于是再次回到网页端登录,仔细研究后发现,我的登录应该是成功的,但登录完成后,又重新跳转回来,根据这个情况,我猜测可能是登录态出现了问题。
于是尝试切换到 Safari 、Chrome 的无痕模式登录,依然没有解决问题。因此可以排除掉客户端的问题导致的。
找到问题
接下来就是查看服务端问题。登录到服务器上,找到 WordPress 的日志,查看最近的几条日志,突然在众多 Notice 当中,看到了一个 Exception:
RedisException: OOM command not allowed when used memory > 'maxmemory'
Code language: JavaScript (javascript)
看到这个报错,突然明白了问题在哪了。
我的 WordPress 使用 Redis 作为缓存,而我过去一直配置的缓存空间是 128M,看报错,显然是因为 Redis 使用的内存空间大于 128M,而我过去没有配置逐出机制(默认是 noeviction
),导致直接 OOM 爆掉了。
而我的登录态也使用了 Redis,没办法在缓存当中塞入新的 Key,自然登录也就失败了。
解决问题
找到问题之后,下一步便是解决问题。
解决问题并不复杂,为 Redis 调整内存空间大小,并配置逐出机制,就可以解决这个问题。
maxmemory 221000000
maxmemory-policy allkeys-lru
将 Redis 逐出机制设置为 allkeys-lru
,并将内存设置为 200M 后,重启 Redis ,果然我的 WordPress 可以正常登录了。
参考
allkeys-lru
表示对移除最近使用最少的 (least recently used)Key。
更多算法可以参考 Key Evicution