Ruby on rails Sidekiq独特工作的奇怪行为

Ruby on rails Sidekiq独特工作的奇怪行为,ruby-on-rails,ruby-on-rails-3,sidekiq,Ruby On Rails,Ruby On Rails 3,Sidekiq,嗯。我使用Sidekiq在后台转换视频文件。我使用它来避免使用相同的有效负载对象复制作业 我运行sidekiq进程,没有任何选项,只是在默认队列中,并发度为25 问题是:视频文件在处理了很长一段时间后,每个作业都非常大,会进入队列积压,但处理的作业的大小也在增加 这项工作既不完整也不独特。我卡住了。提前谢谢 UPD: 我正在将Puma作为web服务器运行。尝试在没有sidekiq unique jobs gem的情况下运行它。它只保护你30分钟不受欺骗。该gem将Redis中的hashkey设置

嗯。我使用Sidekiq在后台转换视频文件。我使用它来避免使用相同的有效负载对象复制作业

我运行sidekiq进程,没有任何选项,只是在默认队列中,并发度为25

问题是:视频文件在处理了很长一段时间后,每个作业都非常大,会进入队列积压,但处理的作业的大小也在增加

这项工作既不完整也不独特。我卡住了。提前谢谢

UPD:


我正在将Puma作为web服务器运行。

尝试在没有sidekiq unique jobs gem的情况下运行它。它只保护你30分钟不受欺骗。该gem将Redis中的hashkey设置为30分钟后自动过期。sidekiq本身将其工作设置为24小时后在Redis中自动过期

我显然没有看到你的应用程序,但我敢打赌你根本不想经常处理同一个文件。我会在应用层控制它,并跟踪我自己的hashkey,做一些类似于unique jobs gem所做的事情:

hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
sidekiq独特作业中间件也可能妨碍sidekiq了解作业是否正确完成。我敢打赌,没有多少人在您相同的配置中使用长时间运行的作业来测试这一点

如果您在没有附加中间件的情况下仍然看到这种行为,请尝试resque。我从未在gem上见过这种行为,失败的作业在管理GUI中有一个有用的重试选项

sidekiq的主要优点是它是多线程的。即便如此,与大型视频进程的并发性为25可能会使其有所提高。根据我的经验,forking更稳定、更可移植,对应用程序线程安全性的担忧更少


无论您做什么,请确保您知道这些系统在Redis中的数据上的自动到期TTL设置。你工作的规模和性质意味着工作可以轻松备份24小时。这些自动删除发生在数据库层。如果作业已自动删除,则不会回调应用程序层以发出警告。例如,在sidekiq代码中,他们引入了自动过期行为以避免任何可能的泄漏。如果您真的需要执行这些作业,那么这并不十分令人鼓舞。

尝试在没有sidekiq独特作业gem的情况下运行它。它只保护你30分钟不受欺骗。该gem将Redis中的hashkey设置为30分钟后自动过期。sidekiq本身将其工作设置为24小时后在Redis中自动过期

我显然没有看到你的应用程序,但我敢打赌你根本不想经常处理同一个文件。我会在应用层控制它,并跟踪我自己的hashkey,做一些类似于unique jobs gem所做的事情:

hash = Digest::MD5.hexdigest(Sidekiq.dump_json(md5_arguments))
sidekiq独特作业中间件也可能妨碍sidekiq了解作业是否正确完成。我敢打赌,没有多少人在您相同的配置中使用长时间运行的作业来测试这一点

如果您在没有附加中间件的情况下仍然看到这种行为,请尝试resque。我从未在gem上见过这种行为,失败的作业在管理GUI中有一个有用的重试选项

sidekiq的主要优点是它是多线程的。即便如此,与大型视频进程的并发性为25可能会使其有所提高。根据我的经验,forking更稳定、更可移植,对应用程序线程安全性的担忧更少


无论您做什么,请确保您知道这些系统在Redis中的数据上的自动到期TTL设置。你工作的规模和性质意味着工作可以轻松备份24小时。这些自动删除发生在数据库层。如果作业已自动删除,则不会回调应用程序层以发出警告。例如,在sidekiq代码中,他们引入了自动过期行为以避免任何可能的泄漏。如果您真的需要执行这些作业,这并不十分令人鼓舞。

这些作业是否需要超过30分钟才能完成?远远超过30分钟。平均3-4小时这些工作是否需要超过30分钟才能完成?远远超过30分钟。3-4小时是平均时间,谢谢你的回复。事实上,现在我再也看不到这种行为了,原因仍然有点不清楚。我所做的:当然,我配置了唯一性过期,并将其设置为6小时。我运行rediscliflushall来清除所有作业,因为我有一个习惯,就是因为出现旧作业而不安全地杀死sidekiq进程。我还配置了ffmpeg,每个作业仅使用2个线程进行转换,并且只有3个sidekiq作业同时运行。服务器上有8个核心处理器,25个并发ffmpeg作业对它来说太多了,不是吗我知道没有必要使用sidekiq f
或者这个问题,但我也用它做其他类型的工作,我真的可以感受到它的所有力量,看到sidekiq真的很有效。所以我继续使用它,即使是用于视频转换。分叉另一个进程可能更稳定,但它也会在性能上引入很多过载。现在运行25个并发作业可能是可行的,但如果您正在分叉进程,您可能只能运行5个。好的,谢谢您的回复。事实上,现在我再也看不到这种行为了,原因仍然有点不清楚。我所做的:当然,我配置了唯一性过期,并将其设置为6小时。我运行rediscliflushall来清除所有作业,因为我有一个习惯,就是因为出现旧作业而不安全地杀死sidekiq进程。我还配置了ffmpeg,每个作业仅使用2个线程进行转换,并且只有3个sidekiq作业同时运行。服务器上有8个核心处理器,25个并发ffmpeg作业对它来说太多了,不是吗我知道没有必要用sidekiq来解决这个问题,但我也用它来处理其他类型的工作,在这些工作中,我真的可以感受到sidekiq的所有力量,并看到sidekiq真的很有效。所以我继续使用它,即使是用于视频转换。分叉另一个进程可能更稳定,但它也会在性能上引入很多过载。现在运行25个并发作业可能是可行的,但如果您正在分叉进程,则可能只能运行5个。