搜索

5.2. puma 调优

download PDF

puma 是一个 ruby 应用服务器,用于向客户端提供 Foreman 相关请求。对于处理大量客户端或频繁操作的 Satellite 配置,务必要适当地调整 Puma。

5.2.1. puma Threads

Puma 线程数量(每个 Puma worker)使用两个值进行配置: threads_minthreads_max

threads_min 的值决定了每个 worker 在启动时生成的线程数量。然后,由于并发请求来自且需要更多的线程,因此 worker 将生成更多 worker,最多生成 threads_max 限制。

我们建议将 threads_min 设置为与 threads_max 的值与具有较少的 Puma 线程的值会导致 Satellite 服务器上的内存使用高。

例如,我们使用并发注册测试比较了这两个设置:

带有 8 个 CPU、40 GiB RAM 的 Satellite 虚拟机带有 8 个 CPU、40 GiB RAM 的 Satellite 虚拟机

--foreman-foreman-service-puma-threads-min=0

--foreman-foreman-service-puma-threads-min=16

--foreman-foreman-service-puma-threads-max=16

--foreman-foreman-service-puma-threads-max=16

--foreman-foreman-service-puma-workers=2

--foreman-foreman-service-puma-workers=2

threads_min=0 相比,将最小 Puma 线程设置为 16 会产生大约 12% 的内存用量。

5.2.2. Puma Worker 和 Threads Auto-Tuning

如果您没有通过 satellite-installer 提供任何 Puma worker 和线程值,或者 Satellite 配置中没有它们,satellite-installer 会配置均衡的 worker 数量。它遵循这个公式:

min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)

在大多数情况下,这应该可以正常工作,但有些使用模式调整需要限制专用于 Puma 的资源量(因此其他 Satellite 组件可以使用这些资源)或其它原因。每个 Puma worker 大约消耗 1 GiB 内存。

查看您当前的 Satellite 服务器设置

# cat /etc/systemd/system/foreman.service.d/installer.conf

查看当前活跃的 Puma worker

# systemctl status foreman

5.2.3. 手动调整 Puma worker 和线程数

如果您决定不依赖于 第 5.2.2 节 “Puma Worker 和 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 服务器。更多信息请参阅 第 5.1 节 “应用配置”

5.2.4. Puma Workers 和 Threads Recommendations

为了为不同的调优配置文件推荐线程和 worker 配置,我们使用不同的调优配置文件对 Satellite 进行 Puma 调优测试。此测试中使用的主测试是与以下组合并发注册,以及不同数量的 worker 和线程。我们的建议仅基于并发注册性能,因此可能无法反映您的具体用例。例如,如果您的设置对于大量发布和提升而言非常内容,您可能希望限制 Puma 所消耗的资源,而代之为 Pulp 和 PostgreSQL。

Name受管主机数量RAM内核推荐的 min 和 max 的 Puma 线程推荐的 Puma Worker

default

0 – 5000

20 GiB

4

16

4 – 6

5000 – 10000

32 GiB

8

16

8 – 12

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 分钟/最大线程,但我们推荐使用上表中所有调优配置文件的 16 个线程。这是因为,与设置有 4 个线程时,我们看到的性能提升高达 23%(16 个线程为 14%,8% 为 32)。

要找出这些建议,我们使用了并发注册测试案例,这是非常具体的用例。您的 Satellite 上可能会有不同,这可能具有更均衡的用例(不仅注册)。保留默认的 5 分钟/最大线程是很好的选择。

以下是导致我们这些建议的一些测量:

 4 个 worker、4 个线程4 个 worker、8 个线程4 个 worker、16 个线程4 个 worker,32 个线程

改进了

0%

14%

23%

10%

在默认设置(4 个 CPU)上使用 4 个 workers (4 个 CPU)- 与 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)上使用 8wagon-wagon12 worker - 请参考下表:

 2 个 worker,16 个线程4 个 worker、16 个线程8 个 worker、16 个线程12 个 worker,16 个线程16 个 worker, 16 个线程

改进了

0%

51%

52%

52%

42%

在 32 个 CPU 设置上使用 16 个是 16 个 CPUs 设置(这在 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%

失败太多

失败太多

5.2.5. 配置 Puma Worker

如果您有足够的 CPU,则添加更多 worker 会增加性能。例如,我们将 Satellite 设置与 8 和 16 个 CPU 进行比较:

表 5.1. Satellite-installer 选项用于测试 worker 数量的影响
带有 8 个 CPU、40 GiB RAM 的 Satellite 虚拟机带有 16 个 CPU 的 Satellite 虚拟机,40 GiB RAM

--foreman-foreman-service-puma-threads-min=16

--foreman-foreman-service-puma-threads-min=16

--foreman-foreman-service-puma-threads-max=16

--foreman-foreman-service-puma-threads-max=16

--foreman-foreman-service-puma-workers={2|4|8|16}

--foreman-foreman-service-puma-workers={2|4|8|16}

在 8 个 CPU 设置中,将 worker 数量从 2 改为 16,将并发注册时间增加到 36%。在 16 个 CPU 设置中,同样的更改会导致 55% 的提高。

添加更多 worker 也可以帮助总注册并发 Satellite 处理。在我们的测量中,使用 2 个 worker 设置可以处理最多 480 个并发注册,但添加更多 worker 提高了这种情况。

5.2.6. 配置 Puma 线程

更多线程可以减少时间并行注册主机。例如,我们比较了这两个设置:

带有 8 个 CPU、40 GiB RAM 的 Satellite 虚拟机带有 8 个 CPU、40 GiB RAM 的 Satellite 虚拟机

--foreman-foreman-service-puma-threads-min=16

--foreman-foreman-service-puma-threads-min=8

--foreman-foreman-service-puma-threads-max=16

--foreman-foreman-service-puma-threads-max=8

--foreman-foreman-service-puma-workers=2

--foreman-foreman-service-puma-workers=4

使用更多 worker 和相同线程总数会导致在高度并发注册场景中大约有 11% 的速度。此外,添加更多 worker 不会消耗更多 CPU 和 RAM,但会获得更好的性能。

5.2.7. 配置 Puma DB 池

$db_pool 的有效值设为 equal $foreman::foreman_service_puma_threads_max。它是 $foreman::db_pool$foreman::foreman_service_puma_threads_max 的最大值,但其默认值为 5,因此对 5 以上的最大线程的增加都会自动增加数据库连接池。

如果您遇到 ActiveRecord::ConnectionTimeoutError: 无法从 5.000 秒(waited 5.006 秒)内的池获取连接;所有池的连接都在 /var/log/foreman/production.log 中出现错误,您可能需要增加这个值。

查看当前的 db_pool 设置

# grep pool /etc/foreman/database.yml
  pool: 5

5.2.8. 手动调整 db_pool

如果您决定不依赖于自动配置的值,您可以应用自定义数字,如下所示:

# satellite-installer --foreman-db-pool 10

将您的更改应用到 Satellite 服务器。更多信息请参阅 第 5.1 节 “应用配置”

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.