我使用 Starter 计划(0.5 CPU / 512 MB)在 Render 上部署了一个简单的 Rails API 映像。
User
模型有一个 picture
字段,该字段是由 carrierwave
托管的字段,托管在 AWS S3 上。
每当我的应用程序调用 API 来检索
User
模型及其关联图片(4 kB)时,我的服务器都会使用所有可用的内存。如果事后推送更多请求,有时会崩溃。这种情况发生在正确完成检索用户的请求之后。在此图中,我们可以看到它的使用率从大约 75% 上升到 100%,因此在本例中,请求的使用量约为 120Mb。
这是我的 Carrierwave 配置:
CarrierWave.configure do |config|
if Rails.env.development?
config.storage = :file
config.asset_host = 'http://localhost:3000'
else
config.storage = :aws
config.aws_bucket = "#{ENV.fetch('S3_BUCKET_NAME')}-#{Rails.env}"
config.aws_acl = 'private'
config.aws_authenticated_url_expiration = 60 * 60 * 24 * 7
config.aws_attributes = -> { {
expires: 1.week.from_now.httpdate,
cache_control: 'max-age=604800'
} }
config.aws_credentials = {
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
region: ENV.fetch('AWS_REGION'), # Required
stub_responses: Rails.env.test?
}
end
end
在
development
环境(使用 S3 托管资产)本地运行相同的容器时,内存使用量保持稳定。但每当我切换到 production
时,内存使用量就会像渲染一样增加。我还尝试在具有 carrierwave
环境的本地容器中使用 :file
和 production
模式(因此没有 S3),并且内存使用量不会增加。
知道这可能与什么有关吗?我研究了
carrierwave-aws
gem 问题,但没有找到任何东西......
我最终切换到
fog
来处理 S3 存储,我的应用程序的内存使用情况再次稳定了 🎉