gpt4 book ai didi

ruby-on-rails - Heroku Puma Sidekiq 运行 167% crititcal r14 内存配额在 3 个 web dynos 上超过一位访客

转载 作者:IT王子 更新时间:2023-10-29 06:14:02 26 4
gpt4 key购买 nike

我在 Heroku 上的 3 个测功机(标准 1x)上运行 Puma 3.4、Rails 4.2.6、Sidekiq 4.2.2、Redis Mini。我正在进行简单的 Beta 测试,我似乎无法优化我的 puma-dyno 情况。当一个用户在网站上时,我会收到高响应时间警报和临界内存配额警报(我正在使用 New Relic 进行监控)。

我已经添加了 Puma Worker Killer 来尝试对此进行诊断,但没有帮助。

我使用环境变量(最大线程数、并发性等)设置了所有内容,并且我在互联网上搜索了如何配置。

我在 database.yml、sidekiq.rb、puma.rb、puma_worker_killer.rb 和 sidekiq.yml 中设置选项,所以我可能在太多地方设置了东西。

因为我正在为一个用户运行 3 个标准 1x 网络测功机,所以我知道出了点问题。

配置/puma.rb

before_fork do
require 'puma_worker_killer'
ActiveRecord::Base.connection_pool.disconnect!

PumaWorkerKiller.config do |config|
config.ram = ENV['PUMA_WORKER_KILLER_RAM'] || 1024 # mb
config.frequency = 5 # seconds
config.percent_usage = 0.98
config.rolling_restart_frequency = 12 * 3600 # 12 hours in seconds
end

PumaWorkerKiller.start
end

workers Integer(ENV['WEB_CONCURRENCY'] || 5)

min_threads_count = Integer(ENV['MIN_THREADS'] || 1)

threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)

threads min_threads_count, threads_count

preload_app!

rackup DefaultRackup
port ENV['PORT'] || 5000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do


ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end

配置/初始化程序/sidekiq.rb

require 'sidekiq'

redis_url = ENV['REDISTOGO_URL']

redis_config = {
url: redis_url,
namespace: 'oct',
}

Sidekiq.configure_server do |config|
config.redis = { url: ENV["REDISTOGO_URL"], namespace: 'oct', size: ENV["SIDEKIQ_SERVER_CONNECTIONS"].to_i || 6}

config.error_handlers << Proc.new do |exception, context_hash|
SidekiqErrorService.new(exception, context_hash).notify
end
end

Sidekiq.configure_client do |config|
config.redis = { url: ENV["REDISTOGO_URL"], namespace: 'oct', size: ENV["REDIS_CLIENT_CONNECTION_SIZE"].to_i || 2}
end

配置/sidekiq.yml

:verbose: false

:concurrency: <%= ENV["WEB_CONCURRENCY"] %>

production:
:timeout: <%= ENV["SIDEKIQ_TIMEOUT"] %>
development:
:timeout: 30

:queues:
- [highest, 2]
- medium
- lowest
- mailers

config/initializers/puma_worker_killer.rb

PumaWorkerKiller.enable_rolling_restart

配置/数据库.yml

default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV["DB_POOL"] || ENV['RAILS_MAX_THREADS'] || 5 %>

development:
<<: *default
database: myapp_development
username: myapp
password: myapp
host: localhost
port: 5432
test:
<<: *default
database: myapp_test
username: myapp
password: myapp
host: localhost
port: 5432

我当前的环境设置

内存 125-167%(在 web dynos 上,不是 worker dynos)

WEB_CONCURRENCY:  4
DB_POOL: 15
SIDEKIQ_SERVER_CONNECTIONS: 25
MIN_THREADS: 1
RAILS_MAX_THREADS: 5
REDIS_CLIENT_CONNECTION_SIZE: 1
SIDEKIQ_TIMEOUT: 30
DATABASE_REAP_FREQ: 5
PUMA_WORKER_KILLER_RAM: 1535

我也尝试过使用这个助手 http://manuelvanrijn.nl/sidekiq-heroku-redis-calc/

但这让情况变得更糟,300% + 内存使用

WEB_CONCURRENCY:  45
DB_POOL: 15
SIDEKIQ_SERVER_CONNECTIONS: 47
MIN_THREADS: 1
RAILS_MAX_THREADS: 5
REDIS_CLIENT_CONNECTION_SIZE: 1
SIDEKIQ_TIMEOUT: 30
DATABASE_REAP_FREQ: 5
PUMA_WORKER_KILLER_RAM: 1535

最佳答案

对于 Rails 4,即使是 4 个 puma worker 也有太多(45 个对于那个级别来说高得离谱)。 Standard-1x dynos 有 512MB。尝试将 WEB_CONCURRENCY 降低到 2,我怀疑您会看到内存消耗大幅减少以防止 R14。

如果将 WEB_CONCURRENCY 切换为 2 后您仍然遇到问题,则需要进行一些内存优化或将其降至 1。

关于ruby-on-rails - Heroku Puma Sidekiq 运行 167% crititcal r14 内存配额在 3 个 web dynos 上超过一位访客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com