5.2. Puma のチューニング
Puma は、Foreman 関連のリクエストをクライアントに提供するために使用される ruby アプリケーションサーバーです。多数のクライアントまたは頻繁な操作を処理することが想定されている Satellite 設定では、Puma を適切にチューニングすることが重要です。
5.2.1. Puma スレッド数 リンクのコピーリンクがクリップボードにコピーされました!
Puma ワーカーごとの Puma スレッドの数を設定するには、threads_min
および threads_max
の値を使用します。
threads_min
の値は、ワーカーの起動時に各ワーカーが生成するスレッドの数を決定します。その後、同時リクエストが発生し、より多くのスレッドが必要になると、ワーカーは上限である thread_max
に達するまでさらに多くのワーカーを生成します。
Puma スレッドが少ないと Satellite Server のメモリー使用量が増えるため、threads_min
を thread_max
と同じ値に設定することを推奨します。
たとえば、同時登録テストを使用して、8 CPU および 40 GiB RAM を搭載した仮想マシンでこれらの 2 つのセットアップを比較しました。これらはどちらも used --foreman-foreman-service-puma-threads-max=16
および --foreman-foreman-service-puma-workers=2 です
。--foreman-foreman-service-puma-threads-min=
を使用して最小 Puma スレッドを 16 に設定すると、16
0
と比較してメモリー使用量が約 12% 少なくなります。
5.2.2. Puma のワーカー数とスレッド数の自動チューニング リンクのコピーリンクがクリップボードにコピーされました!
Puma のワーカーとスレッドの値を satellite-installer
で指定しなかった場合、またはそれらが Satellite 設定に存在しない場合、satellite-installer
はバランスの取れたワーカー数を設定します。satellite-installer は次の式に従います。
min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)
min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)
ほとんどの場合はこれで問題ありませんが、使用パターンによっては、(他の Satellite コンポーネントがリソースを使用できるように) Puma 専用のリソースの量を制限するなどの理由で、チューニングが必要になる場合があります。各 Puma ワーカーは約 1 GiB の RAM を消費します。
現在の Satellite Server 設定を表示する
cat /etc/systemd/system/foreman.service.d/installer.conf
# cat /etc/systemd/system/foreman.service.d/installer.conf
現在アクティブな Puma ワーカーを表示する
systemctl status foreman
# systemctl status foreman
5.2.3. Puma のワーカー数とスレッド数の手動チューニング リンクのコピーリンクがクリップボードにコピーされました!
「Puma のワーカー数とスレッド数の自動チューニング」 を利用しない場合は、これらの調整パラメーターにカスタム数値を適用できます。以下の例では、2 つのワーカーと、最小 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 Server に適用します。詳細は、「設定の適用」 を参照してください。
5.2.4. 推奨される Puma のワーカー数とスレッド数 リンクのコピーリンクがクリップボードにコピーされました!
さまざまなチューニングプロファイルのスレッドとワーカーの設定を推奨するために、Red Hat はさまざまなチューニングプロファイルを使用して、Satellite で Puma チューニングテストを実施しました。このテストで使用した主なテストは、さまざまなワーカー数とスレッド数を使用した、次の組み合わせによる同時登録です。当社の推奨値は、純粋に同時登録のパフォーマンスに基づいているため、正確なユースケースを反映していない可能性があります。たとえば、セットアップが非常にコンテンツ指向で、パブリッシュとプロモートが多い場合は、Pulp と PostgreSQL を優先して Puma によって消費されるリソースを制限することもできます。
名前 | ホスト数 | RAM | コア | 最小と最大の両方に推奨される Puma スレッド数 | 推奨される Puma ワーカー数 |
---|---|---|---|---|---|
default | 0 - 5000 | 20 GiB | 4 | 16 | 4 - 6 |
medium | 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 スレッドを使用しますが、上記の表のすべてのチューニングプロファイルでは、16 スレッドを使用することを推奨します。これは、4 スレッドでのセットアップと比較して、16 スレッドで最大 23% のパフォーマンス向上 (8 で 14%、32 で 10%) が見られたためです。
Red Hat はこの推奨値を明らかにするために、非常に特殊なユースケースである同時登録テストケースを使用しました。これは、(登録だけでなく) よりバランスの取れたユースケースを持つ Satellite では異なる場合があります。デフォルトの最小/最大 5 スレッドを維持することも良い選択です。
この推奨値の根拠となった測定値の一部を以下に示します。
4 ワーカー、4 スレッド | 4 ワーカー、8 スレッド | 4 ワーカー、16 スレッド | 4 ワーカー、32 スレッド | |
---|---|---|---|---|
向上率 | 0% | 14% | 23% | 10% |
default セットアップ (4 CPU) では 4 - 6 つのワーカーを使用します。ワーカー 5 つの場合は、ワーカー 2 つと比較した場合、約 25% パフォーマンスが向上しました。しかし、ワーカー 8 つの場合は、ワーカー 2 つと比較した場合、パフォーマンスが 8% 低下しました。以下の表を参照してください。
2 ワーカー、16 スレッド | 4 ワーカー、16 スレッド | 6 ワーカー、16 スレッド | 8 ワーカー、16 スレッド | |
---|---|---|---|---|
向上率 | 0% | 26% | 22% | -8% |
medium セットアップ (8 CPU) では 8 - 12 個のワーカーを使用します。以下の表を参照してください。
2 ワーカー、16 スレッド | 4 ワーカー、16 スレッド | 8 ワーカー、16 スレッド | 12 ワーカー、16 スレッド | 16 ワーカー、16 スレッド | |
---|---|---|---|---|---|
向上率 | 0% | 51% | 52% | 52% | 42% |
32 CPU のセットアップでは 16 - 24 個のワーカーを使用します (これは 90 GiB RAM マシンでテストされました。システムがスワッピングを開始し、メモリーがここでの 1 つの要因となっていることが判明したためです。適切な extra-large には 128 GiB が必要です)。ワーカー数をそれ以上に増やすと、高い同時登録レベルでテストした際に問題が発生したため、このような設定は推奨できません。
4 ワーカー、16 スレッド | 8 ワーカー、16 スレッド | 16 ワーカー、16 スレッド | 24 ワーカー、16 スレッド | 32 ワーカー、16 スレッド | 48 ワーカー、16 スレッド | |
---|---|---|---|---|---|---|
向上率 | 0% | 37% | 44% | 52% | 失敗が多すぎる | 失敗が多すぎる |
5.2.5. Puma ワーカー数の設定 リンクのコピーリンクがクリップボードにコピーされました!
CPU が十分にある場合は、ワーカーを追加するとパフォーマンスが向上します。例として、8 CPU と 16 CPU の Satellite セットアップを比較しました。
8 CPU、40 GiB RAM を搭載した Satellite 仮想マシン | 16 CPU、40 GiB RAM を搭載した Satellite 仮想マシン |
---|---|
|
|
|
|
|
|
8 CPU のセットアップでは、ワーカー数を 2 から 16 に変更すると、同時登録時間が 36% 向上しました。16 CPU のセットアップでは、同じ変更で 55% の向上が見られました。
ワーカーを追加すると、Satellite が処理できる同時登録の総数も増やすことができます。当社の測定では、2 つのワーカーを使用したセットアップで最大 480 の同時登録を処理できましたが、ワーカーを追加すると状況が改善されました。
5.2.6. Puma スレッド数の設定 リンクのコピーリンクがクリップボードにコピーされました!
スレッド数が多いほど、ホストを並行して登録する時間を短縮できます。例として、次の 2 つの設定を比較しました。
8 CPU、40 GiB RAM を搭載した Satellite 仮想マシン | 8 CPU、40 GiB RAM を搭載した Satellite 仮想マシン |
---|---|
|
|
|
|
|
|
総スレッド数はそのままにして、使用するワーカー数を増やすと、同時登録のシナリオで約 11% の速度向上が得られます。さらに、ワーカーを追加しても CPU と RAM の消費量は増加しませんでしたが、パフォーマンスは向上しました。
5.2.7. Puma DB プールの設定 リンクのコピーリンクがクリップボードにコピーされました!
$db_pool
の実効値は、自動的に $foreman::foreman_service_puma_threads_max
と等しくなるように設定されます。これは $foreman::db_pool
と $foreman::foreman_service_puma_threads_max
の最大値ですが、どちらもデフォルト値が 5 であるため、最大スレッド数が 5 を超えると、データベース接続プールが自動的に同じ量だけ増加します。
/var/log/foreman/production.log
に、ActiveRecord::ConnectionTimeoutError: could not obtain a connection from the pool within 5.000 seconds (waited 5.006 seconds); all pooled connections were in use
というエラーが見られたら、この値を増やすことを推奨します。
現在の 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
変更を Satellite Server に適用します。詳細は、「設定の適用」 を参照してください。