Mel*_*emi 5 memory-leaks ruby-on-rails heroku background-process ruby-on-rails-4
我正在寻求帮助解决一些 R14 和 R15 内存错误,我经常在 Heroku 上运行的 Rails 应用程序的日志中发现这些错误。
Jan 15 08:34:12 myapp-production app/worker.1: 2018-1-15T16:34:11+0000: [Worker(host:a833f658-b5 pid:4)] Job StoryAssetMailer#perform (id=7776) RUNNING
Jan 15 08:36:31 myapp-production heroku/worker.1: Process running mem=518M(100.0%)
Jan 15 08:36:31 myapp-production heroku/worker.1: Error R14 (Memory quota exceeded)
Jan 15 08:36:33 myapp-production heroku/worker.1: Error R15 (Memory quota vastly exceeded)
Run Code Online (Sandbox Code Playgroud)
我已按照Heroku 的 R14 支持WEB_CONCURRENCY=1页面上的建议进行设置。这没什么区别。
问题是我真的不知道使用什么工具来测量内存峰值(泄漏?)发生的位置?我可以找到有问题的方法(包括在下面),但寻找如何缩小问题的确切范围的想法,然后我会担心如何解决它。
后台进程创建错误是Job StoryAssetMailer#perform:
# app/jobs/story_asset_mailer.rb
require Rails.root.join('lib', 's3_store')
require 'zip'
class StoryAssetMailer
def initialize(recipient:, story:)
@recipient = recipient
@story = story
end
def perform
stored_file = S3Store.new(
zip_file_stream,
@story.download_safe_title(
extension: 'zip'
)
).store(method: :sysread)
Mailer.story_images(
recipient: @recipient,
story: @story,
file_url: stored_file.url
).deliver
end
def zip_file_stream
manifest = ZipManifest.build(media_files_for_story)
build_zip_file(manifest)
end
...
end
Run Code Online (Sandbox Code Playgroud)
相关型号:
#app/models/zip_manifest.rb
require 'open-uri'
class ZipManifest
def initialize(manifest: nil)
@manifest ||= manifest
end
def each_file
@manifest.each do |contents, filename|
yield filename, contents
end
end
def self.build(images)
new(
manifest:
images.map do |image|
[open(image.url), image.filename]
end
)
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:这个东西开了吗?
| 归档时间: |
|
| 查看次数: |
8385 次 |
| 最近记录: |