浏览代码

[ruby/hanami] Auto config workers (#10085)

Let Puma select the number of workers.
Petrik de Heus 1 周之前
父节点
当前提交
8cc3cc1906

+ 0 - 43
frameworks/Ruby/hanami/config/auto_tune.rb

@@ -1,43 +0,0 @@
-#!/usr/bin/env ruby
-# frozen_string_literal: true
-
-# Instantiate about one process per X MiB of available memory, scaling up to as
-# close to MAX_THREADS as possible while observing an upper bound based on the
-# number of virtual/logical CPUs. If there are fewer processes than
-# MAX_THREADS, add threads per process to reach MAX_THREADS.
-require 'etc'
-
-KB_PER_WORKER = 128 * 1_024 # average of peak PSS of single-threaded processes (watch smem -k)
-MIN_WORKERS = 2
-MAX_WORKERS_PER_VCPU = 1.25 # virtual/logical
-MIN_THREADS_PER_WORKER = 1
-MAX_THREADS = Integer(ENV['MAX_CONCURRENCY'] || 256)
-
-def meminfo(arg)
-  File.open('/proc/meminfo') do |f|
-    f.each_line do |line|
-      key, value = line.split(/:\s+/)
-      return value.split(/\s+/).first.to_i if key == arg
-    end
-  end
-
-  raise "Unable to find `#{arg}' in /proc/meminfo!"
-end
-
-def auto_tune
-  avail_mem = meminfo('MemAvailable') * 0.8 - MAX_THREADS * 1_024
-
-  workers = [
-    [(1.0 * avail_mem / KB_PER_WORKER).floor, MIN_WORKERS].max,
-    [(Etc.nprocessors * MAX_WORKERS_PER_VCPU).ceil, MIN_WORKERS].max
-  ].min
-
-  threads_per_worker = [
-    workers < MAX_THREADS ? (1.0 * MAX_THREADS / workers).ceil : -Float::INFINITY,
-    MIN_THREADS_PER_WORKER
-  ].max
-
-  [workers, threads_per_worker]
-end
-
-p auto_tune if $PROGRAM_NAME == __FILE__

+ 0 - 6
frameworks/Ruby/hanami/config/puma.rb

@@ -1,10 +1,4 @@
 # frozen_string_literal: true
-require_relative 'auto_tune'
-
-# FWBM only... use the puma_auto_tune gem in production!
-num_workers, num_threads = auto_tune
-
-workers num_workers
 threads 3, 3
 
 port        ENV.fetch("HANAMI_PORT", 2300)

+ 1 - 0
frameworks/Ruby/hanami/hanami.dockerfile

@@ -1,6 +1,7 @@
 FROM ruby:3.4
 
 ENV RUBY_YJIT_ENABLE=1
+ENV WEB_CONCURRENCY=auto
 
 # Use Jemalloc
 RUN apt-get update && \