6.2. puma Tunings
puma 是一个 ruby 应用服务器,用于向客户端提供与 Foreman 相关的请求。对于应该处理大量客户端或频繁操作的 Satellite 配置,必须正确调整 Puma。
6.2.1. puma 线程 复制链接链接已复制到粘贴板!
Puma 线程数量(每个 Puma worker)配置为使用两个值进行配置: threads_min 和 threads_max。
threads_min 的值决定了每个 worker 在 worker 启动时生成多少个线程。然后,当并发请求进入并且需要更多线程时,worker 将生成更多 worker,最多为 threads_max 限制。
我们建议将 threads_min 设置为与 threads_max 的值相同,与 Puma 线程较少的值相同,这会导致 Satellite 服务器上的内存用量更高。
例如,我们已使用并发注册测试来比较这两个设置:
| 具有 8 个 CPU 的 Satellite 虚拟机,40 GiB RAM | 具有 8 个 CPU 的 Satellite 虚拟机,40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
与 threads_min=0 相比,将最小 Puma 线程设置为 16 会导致大约需要 12% 的内存用量。
6.2.2. puma Workers 和 Threads Auto-Tuning 复制链接链接已复制到粘贴板!
如果您没有通过 satellite-installer 提供任何 Puma worker 和 thread 值,或者 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.service
# systemctl status foreman.service
6.2.3. 手动调整 Puma worker 和线程数 复制链接链接已复制到粘贴板!
如果您决定不依赖 第 6.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
将您的更改应用到 Satellite 服务器。更多信息请参阅 第 6.1 节 “应用配置”。
6.2.4. puma Workers 和 Threads Recommendations 复制链接链接已复制到粘贴板!
为了为不同的调优配置集推荐线程和 worker 配置,我们对具有不同调优配置文件的 Satellite 进行了 Puma 调优测试。此测试中使用的主要测试是使用下列组合的并发注册,以及不同数量的 worker 和线程。我们建议只基于并发注册性能,因此它可能没有反映您的具体用例。例如,如果您的设置非常面向许多发布和提升的内容,您可能需要限制 Puma 所消耗的资源,而代于 Pulp 和 PostgreSQL。
| Name | 受管主机数量 | RAM | 内核 | 推荐的 min 和 max 的 Puma 线程 | 推荐的 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 |
调优 worker 数量是更重要的方面,在某些情况下,我们看到最多 52% 的性能提高了。虽然安装程序默认使用 5 分钟/最大线程,但我们推荐使用上表中的所有调优配置集的 16 个线程。这是因为,与设置有 4 个线程相比,我们看到最多 23% 的性能提高了 16 个线程(14% 用于 8,10% 用于 32 个)。
要找出这些建议,我们使用了并发注册测试问题单,这是非常具体的用例。它可能在您的 Satellite 上有所不同,这些用例可能具有更均衡的用例(不仅仅是注册)。保持默认的 5 分钟/最大线程也是良好的选择。
以下是我们向我们提供这些建议的一些衡量:
| 4 个 worker,4 个线程 | 4 个 worker,8 个线程 | 4 个 worker,16 个线程 | 4 个 worker,32 个线程 | |
|---|---|---|---|---|
| 改进 | 0% | 14% | 23% | 10% |
在默认设置(4 个 CPU)上使用 4945-1146 worker - 与 2 个 worker 相比,我们看到 25% 的性能,与 2 个 worker 相比,在 8 个 worker 中性能较低,请参阅下表:
| 2 个 worker,16 个线程 | 4 个 worker,16 个线程 | 6 个 worker,16 个线程 | 8 个 worker,16 个线程 | |
|---|---|---|---|---|
| 改进 | 0% | 26% | 22% | -8% |
在中型设置(8 个 CPU)上使用 8598-59812 worker - 请参考下表:
| 2 个 worker,16 个线程 | 4 个 worker,16 个线程 | 8 个 worker,16 个线程 | 12 个 worker,16 个线程 | 16 个 worker,16 个线程 | |
|---|---|---|---|---|---|
| 改进 | 0% | 51% | 52% | 52% | 42% |
在 32 个 CPU 设置(这在 90 GiB RAM 机器上测试,在系统启动交换时被认为是系统启动交换(正确的 额外容量 )应该有 128 GiB,因此我们测试了更高的注册并发级别会出现问题,因此我们无法建议它。
| 4 个 worker,16 个线程 | 8 个 worker,16 个线程 | 16 个 worker,16 个线程 | 24 个 worker,16 个线程 | 32 个 worker,16 个线程 | 48 个 worker,16 个线程 | |
|---|---|---|---|---|---|---|
| 改进 | 0% | 37% | 44% | 52% | 失败太多 | 失败太多 |
6.2.5. 配置 Puma Workers 复制链接链接已复制到粘贴板!
如果有足够的 CPU,添加更多 worker 会增加性能。例如,我们已将 Satellite 设置与 8 和 16 个 CPU 进行比较:
| 具有 8 个 CPU 的 Satellite 虚拟机,40 GiB RAM | 具有 16 个 CPU 的 Satellite 虚拟机,40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
在 8 个 CPU 设置中,将 worker 数量从 2 改为 16,将并发注册时间提高 36%。在 16 个 CPU 设置中,相同的更改会导致 55% 的改进。
添加更多 worker 还可以帮助完成所有注册并发 Satellite 可以处理。在我们的测量中,使用 2 个 worker 设置可以处理 480 并发注册,但添加更多 worker 可以提高这种情况。
手动调整
您可以将 worker 数量设置为 2,并将线程数量设置为五个:
satellite-installer \ --foreman-foreman-service-puma-threads-max=5 --foreman-foreman-service-puma-threads-min=5 \ --foreman-foreman-service-puma-workers=2 \
# satellite-installer \
--foreman-foreman-service-puma-threads-max=5
--foreman-foreman-service-puma-threads-min=5 \
--foreman-foreman-service-puma-workers=2 \
6.2.6. 配置 Puma 线程 复制链接链接已复制到粘贴板!
更多线程允许较少的时间来并行注册主机。例如,我们比较这两个设置:
| 具有 8 个 CPU 的 Satellite 虚拟机,40 GiB RAM | 具有 8 个 CPU 的 Satellite 虚拟机,40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
使用更多 worker 和相同线程总数会导致在高并发注册场景中有 11% 的速度。此外,添加更多 worker 不会消耗更多 CPU 和 RAM,但性能更高。
6.2.7. 配置 Puma DB 池 复制链接链接已复制到粘贴板!
$db_pool 的有效值设为相同的 $foreman::foreman_service_puma_threads_max。它是 $foreman::db_pool 和 $foreman::foreman_service_puma_threads_max 的最大值,但默认值 5 都增加 5,因此 5 以上的最大线程都根据相同数量自动增加数据库连接池。
如果您遇到 ActiveRecord::ConnectionTimeoutError: 无法在 5.000 秒内从池中获取连接(等待 5.006 秒);所有池的连接都在使用 ,您可能需要增加这个值。
/var/log/foreman/production.log 中的错误
查看当前的 db_pool 设置
grep pool /etc/foreman/database.yml pool: 5
# grep pool /etc/foreman/database.yml
pool: 5
6.2.8. 手动调优 db_pool 复制链接链接已复制到粘贴板!
如果您决定不依赖于自动配置的值,您可以应用如下自定义数字:
satellite-installer --foreman-db-pool 10
# satellite-installer --foreman-db-pool 10
将您的更改应用到 Satellite 服务器。更多信息请参阅 第 6.1 节 “应用配置”。