Estamos vendo cargas de IO do servidor de redis, apesar de nossas operações de salvamento estarem definidas para ocorrer uma vez a cada 15 minutos apenas.
A carga de trabalho é um "cache de página inteira"; nós armazenamos blobs de HTML comprimido. O HTML pode ser recriado em tempo real, se necessário, portanto, não precisamos de backup / persistência atualizados ao minuto.
Especificações do servidor:
2x Hex Core Intel Xeon E5-2640 2.5GHz
128GB RAM
2x 400GB Intel SSDs in RAID 1
IO:
# pidstat -d | grep redis
05:01:35 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:01:35 PM 23450 0.01 3981.60 0.00 redis-server
redis save config:
redis 127.0.0.1:6379> config get save
1) "save"
2) "900 10000"
redis appendfsync config:
redis 127.0.0.1:6379> config get appendfsync
1) "appendfsync"
2) "no"
De o manual
RDB maximizes Redis performances since the only work the Redis parent process needs to do in order to persist is forking a child that will do all the rest. The parent instance will never perform disk I/O or alike.
Por isso, só esperaria um alto IO do Redis quando o processo filho temporário existir para executar a operação de salvamento em segundo plano.
Do nosso log do Redis, sobre as salvaguardas de fundo:
# tail /var/log/redis/redis.log
[23450] 27 Aug 16:43:20 * 10000 changes in 900 seconds. Saving...
[23450] 27 Aug 16:43:20 * Background saving started by pid 47396
[47396] 27 Aug 16:44:28 * DB saved on disk
[23450] 27 Aug 16:44:29 * Background saving terminated with success
[23450] 27 Aug 16:59:30 * 10000 changes in 900 seconds. Saving...
[23450] 27 Aug 16:59:30 * Background saving started by pid 4722
[4722] 27 Aug 17:00:40 * DB saved on disk
[23450] 27 Aug 17:00:40 * Background saving terminated with success
Isso ocorre a cada 900 segundos (15 minutos) e leva aproximadamente 1 minuto para ser executado.
Como posso depurar isso mais?
Tags performance redis io