Redis EXECABORT 事务因之前的错误而被丢弃。(Redis::CommandError) Sidekiq 错误

slo*_*ype 1 ruby ruby-on-rails redis sidekiq

我使用 sidekiq 3.4.2 和 redis 3.0.3 来执行一些长时间运行的作业,大约两到四个小时后,我收到以下错误:

错误:心跳:EXECABORT 由于先前的错误,事务已被丢弃。

EXECABORT 由于先前的错误而放弃事务。/home/deployer/apps/wripl-capture/shared/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/pipeline.rb:79 finish' /home/deployer/apps/wripl-capture/shared/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:149:in :在 call_pipeline' /home/deployer/apps 中的块中/wripl-capture/shared/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:279:in with_reconnect' /home/deployer/apps/wripl-capture/shared/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:147:in call_pipeline'/home/deployer/apps/wripl-capture/shared/bundle /ruby/2.2.0/gems/redis-3.2.1/lib/redis.rb:2182 block in multi' /home/deployer/apps/wripl-capture/shared/bundle/ruby/2.2.0/gems/redis-3.2.1/lib/redis.rb:37:in :在同步块中'/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0 /monitor.rb:211:在`mon_synchronize'中

除非我重新启动 sidekiq,否则一切都会被终止(没有运行排队的作业),这不是我需要做的。

知道发生了什么吗?

Mik*_*ham 7

我猜你的 Redis 实例内存不足。


Dan*_*rom 6

由于空multi命令也可能发生这种情况。

跑步redis-cli monitor我看到

1546789398.881549 [0 the-ip] "multi"
1546789398.881575 [0 the-ip] "exec"
Run Code Online (Sandbox Code Playgroud)

在执行 multi 之前,请确保至少有 1 个命令要在事务上执行。