5.2. Puma Tunings
Puma 是一个 ruby 应用程序服务器,用于向客户端提供 Foreman 相关请求。对于应该处理大量客户端或频繁操作的 Satellite 配置,务必要适当调整 Puma。
5.2.1. Puma Threads 复制链接链接已复制到粘贴板!
Puma 线程数量(每个 Puma worker)使用两个值进行配置: thread _min
和 threads_max
。
threads_min
的值决定了每个 worker 在 worker 启动时生成的线程数量。然后,随着并发请求进入,需要更多线程,worker 将生成更多线程,并将更多的 worker 最多为 threads_max
限制。
我们建议将 threads_min
设置为与 threads_max
的值相同,与 Puma 线程数量少会导致您的 Satellite 服务器上的内存用量更高。
例如,我们使用并发注册测试比较这两个设置:
Satellite 虚拟机有 8 个 CPU,40 GiB RAM | Satellite 虚拟机有 8 个 CPU,40 GiB RAM |
---|---|
|
|
|
|
|
|
将最小 Puma 线程设置为 16
会导致与 threads_min=0
相比的内存用量少 12%。
5.2.2. Puma Workers 和 Threads Auto-Tuning 复制链接链接已复制到粘贴板!
如果您没有使用 satellite-installer
提供任何 Puma worker 和线程值,或者 Satellite 配置中不存在它们,satellite-installer
会配置均衡的 worker 数量。它遵循此公式:
min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)
min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)
这对大多数情况来说应该非常好,但需要一些使用模式进行调优,以限制专用于 Puma 的资源数量(因此其他 Satellite 组件可以使用它们),或出于其他原因。每个 Puma worker 都消耗大约 1 GiB RAM。
查看您当前的 Satellite 服务器设置
cat /etc/systemd/system/foreman.service.d/installer.conf
# cat /etc/systemd/system/foreman.service.d/installer.conf
查看当前活跃的 Puma worker
systemctl status foreman
# systemctl status foreman
5.2.3. 手动调整 Puma worker 和线程计数 复制链接链接已复制到粘贴板!
如果您决定不依赖于 第 5.2.2 节 “Puma Workers 和 Threads Auto-Tuning”,您可以为这些可调项应用自定义数字。在以下示例中,我们使用 2 个 worker、5 和 5 线程:
satellite-installer \ --foreman-foreman-service-puma-workers=2 \ --foreman-foreman-service-puma-threads-min=5 \ --foreman-foreman-service-puma-threads-max=5
# satellite-installer \
--foreman-foreman-service-puma-workers=2 \
--foreman-foreman-service-puma-threads-min=5 \
--foreman-foreman-service-puma-threads-max=5
将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.2.4. Puma Workers 和 Threads Recommendations 复制链接链接已复制到粘贴板!
为了为不同的调优配置文件推荐线程和 worker 配置,我们使用不同的调优配置文件在卫星中进行了 Puma 调整测试。此测试中使用的主要测试是与以下组合中的并发注册,以及不同的 worker 和线程数。我们推荐完全基于并发注册性能,因此可能无法反映您的确切用例。例如,如果您的设置非常面向大量发布和推广的内容,您可能需要限制 Puma 消耗的资源,而使用 Pulp 和 PostgreSQL。
名称 | 受管主机数量 | RAM | 内核 | 推荐 min 和 max 的 Puma Threads | 建议 Puma Workers |
---|---|---|---|---|---|
default | 0 – 5000 | 20 GiB | 4 | 16 | 4 – 6 |
中 | 5000 – 10000 | 32 GiB | 8 | 16 | 8 – 12 |
large | 10000 – 20000 | 64 GiB | 16 | 16 | 12 – 18 |
extra-large | 20000 – 60000 | 128 GiB | 32 | 16 | 16 – 24 |
extra-extra-large | 60000+ | 256 GiB+ | 48+ | 16 | 20 – 26 |
调优工作程序数是此处更为重要的方面,在一些情况下,我们看到了 52% 的性能提升。虽然安装程序默认使用 5 个 min/max 线程,但我们建议使用上表中的所有调优配置文件的 16 个线程。这是因为,与设置 4 个线程相比,我们看到了高达 23% 的性能提高,16 个线程(84% 和 10% 为 32)。
要找出这些建议,我们使用了并发注册测试案例,这是非常具体的用例。在您的卫星中可能具有不同的,这可能具有更为均衡的用例(不仅仅是注册)。保持默认的 5 分钟/最大线程也是不错的选择。
以下是我们造成以下建议的一些测量:
4 个 worker,4 个线程 | 4 个 worker,8 个线程 | 4 个 worker,16 个线程 | 4 个 worker,32 个线程 | |
---|---|---|---|---|
改进 | 0% | 14% | 23% | 10% |
在默认设置(4 个 CPU)上使用 4 个 worker - 与 2 个 worker 相比,我们看到 5 个 worker 的性能高 25%,但在与 2 个 worker 相比,高达 8 个 worker 的性能会降低 8 个 worker 的性能 - 如下所示:
2 个 worker,16 个线程 | 4 个 worker,16 个线程 | 6 个 worker,16 个线程 | 8 个 worker、16 个线程 | |
---|---|---|---|---|
改进 | 0% | 26% | 22% | -8% |
在介质设置(8 CPU)上使用 8mvapich-literal12 worker - 请参考下表:
2 个 worker,16 个线程 | 4 个 worker,16 个线程 | 8 个 worker、16 个线程 | 12 个 worker,16 个线程 | 16 个 worker、16 个线程 | |
---|---|---|---|---|---|
改进 | 0% | 51% | 52% | 52% | 42% |
在 32 个 CPU 设置中使用 16 个+1 worker (这在 90 GiB RAM 机器上进行了测试,且内存已作为系统启动交换因素 - 正确的 extra-large 应该有 128 GiB),对于我们测试的更高注册并发级别,我们无法建议它。
4 个 worker,16 个线程 | 8 个 worker、16 个线程 | 16 个 worker、16 个线程 | 24 个 worker,16 个线程 | 32 个 worker,16 个线程 | 48 个 worker,16 个线程 | |
---|---|---|---|---|---|---|
改进 | 0% | 37% | 44% | 52% | 太多故障 | 太多故障 |
5.2.5. 配置 Puma Workers 复制链接链接已复制到粘贴板!
如果您有足够的 CPU,添加更多 worker 会添加更多的性能。例如,我们把 Satellite 设置与 8 和 16 个 CPU 进行对比:
Satellite 虚拟机有 8 个 CPU,40 GiB RAM | Satellite 虚拟机有 16 个 CPU,40 GiB RAM |
---|---|
|
|
|
|
|
|
在 8 个 CPU 设置中,将 worker 数量从 2 改为 16,从而改进了并发注册时间为 36%。在 16 个 CPU 设置中,相同的更改会导致 55% 的提高。
添加更多的 worker 也可以帮助,获得总注册并发 Satellite 可以处理。在我们的测量中,带有 2 个 worker 的设置可以处理最多 480 个并发注册,但添加更多工作程序可以改进这种情况。
5.2.6. 配置 Puma Threads 复制链接链接已复制到粘贴板!
更多线程可以缩短并行注册主机的时间。例如,我们对比了这两个设置:
Satellite 虚拟机有 8 个 CPU,40 GiB RAM | Satellite 虚拟机有 8 个 CPU,40 GiB RAM |
---|---|
|
|
|
|
|
|
使用更多 worker 和相同的线程总数会导致在高度并发注册场景中约 11% 的速度。此外,添加更多 worker 不会消耗更多 CPU 和 RAM,但会获得更高的性能。
5.2.7. 配置 Puma DB 池 复制链接链接已复制到粘贴板!
$db_pool
的有效值设置为 equal $foreman::foreman_service_puma_threads_max
。最多 $foreman::db_pool
和 $foreman_service_puma_threads_max
都是默认的值 5,因此对 5 以上的最大线程自动增加数据库连接池。
如果您遇到 ActiveRecord::ConnectionTimeoutError: 可能无法在 5.000 秒内从池获取连接(等待 5.006 秒);所有池的连接都将在
错误,您可能需要增加这个值。
/var/log/foreman/production.log
中使用
查看当前的 db_pool 设置
grep pool /etc/foreman/database.yml
# grep pool /etc/foreman/database.yml
pool: 5
5.2.8. 手动调优 db_pool 复制链接链接已复制到粘贴板!
如果您决定不依赖于自动配置的值,您可以应用如下自定义数字:
satellite-installer --foreman-db-pool 10
# satellite-installer --foreman-db-pool 10
将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。