在 heroku 上随机推送并行停止
Push parallelization stop randomly on heroku
我想向我的所有用户(大约 500k)发送一个推送活动,但是 heroku dyno 在执行过程中随机停止(我使用的是一次性 dyno,没有引发异常)。
我正在使用 gem Parallel :
User.where(some_stuff).find_in_batches(batch_size: 1000) do |group|
Parallel.each(group, in_threads: 8) do |u|
u.push('hi') # pushing the message via GCM or APN
end
end
在我测试的所有情况下,进程在批处理结束时停止,但在使用 batch_size
和 in_threads
值时我找不到模式。
push
函数不需要数据库访问权限,但也许 find_in_batch
函数因为连接太多而被拒绝?
我使用 performance-l dyno 和 14GB RAM
您不应在应用程序服务器进程中进行长时间的 运行 操作。应用程序服务器将 thread/process 附加到传入请求,并将清除您在请求处理结束时生成的任何线程。你应该在后台做长时间的 运行 操作。看看 sidekik 或 resque。
当激活 Heroku log-runtime-metrics 时,我可以看到 memory_pgpin
和 memory_pgpout
在执行过程中变化很大:
memory_pgpin : 19 240 到 73 998
memory_pgpout : 222 到 12 784
我想这是我的 postgres 计划的问题,但如果您有进一步的解释,请不要犹豫 post 一个答案。
我想向我的所有用户(大约 500k)发送一个推送活动,但是 heroku dyno 在执行过程中随机停止(我使用的是一次性 dyno,没有引发异常)。 我正在使用 gem Parallel :
User.where(some_stuff).find_in_batches(batch_size: 1000) do |group|
Parallel.each(group, in_threads: 8) do |u|
u.push('hi') # pushing the message via GCM or APN
end
end
在我测试的所有情况下,进程在批处理结束时停止,但在使用 batch_size
和 in_threads
值时我找不到模式。
push
函数不需要数据库访问权限,但也许 find_in_batch
函数因为连接太多而被拒绝?
我使用 performance-l dyno 和 14GB RAM
您不应在应用程序服务器进程中进行长时间的 运行 操作。应用程序服务器将 thread/process 附加到传入请求,并将清除您在请求处理结束时生成的任何线程。你应该在后台做长时间的 运行 操作。看看 sidekik 或 resque。
当激活 Heroku log-runtime-metrics 时,我可以看到 memory_pgpin
和 memory_pgpout
在执行过程中变化很大:
memory_pgpin : 19 240 到 73 998
memory_pgpout : 222 到 12 784
我想这是我的 postgres 计划的问题,但如果您有进一步的解释,请不要犹豫 post 一个答案。