Nginxのセッション数を決めるための数式は、サーバーのリソース(メモリ、CPU)や使用ケースに依存しますが、以下のような考え方で設定することができます。
マシンの速度やメモリ数、コアの数も依存するので確率的なことはいえませんがざっとした考え方は示したいと思います。
考え方の例:worker_connections = (総メモリ – OSおよび他のサービスに必要なメモリ) / (ワーカープロセス数 * 1接続あたりのメモリ使用量)
例えば、総メモリが2GB(2048MB)で、Nginxが使用できるメモリが1500MB、ワーカープロセス数が1、1接続あたりのメモリ使用量が2MBと仮定します。
worker_connections: 前述の計算結果に基づいて設定しますが、接続のピーク時や突発的なトラフィックを考慮して、少し余裕を持たせるのが一般的です。例えば、計算結果が750接続であれば、70%程度にして525の接続数などにすることが安全です。
Nginxプロセスのメモリ使用量を確認する際、topコマンドで表示される「VIRT」カラム(仮想メモリ)の値を直接参照することは、1接続あたりのメモリ使用量を正確に推定するには不適切です。以下の理由からです:
例えば、Nginxが1プロセスで11960MBのVIRTを使用している場合、RESを見ると実際に使用されているメモリがどれだけか確認できます。もしRESが200MBで、現在の接続数が100であると仮定。
1 |
1接続あたりのメモリ使用量 = 200MB / 100接続 = 2MB |
★topコマンドで表示される「RES」(実メモリ)の単位は**キロバイト(KB)**です。3956という値は、Nginxプロセスが現在使用している物理メモリが約3.86MB(3956KB / 1024)であることを示しています。
先ほどの例に基づいて、3956KB(約3.86MB)を1接続あたりのメモリ使用量と仮定すると、以下のように推定できます
1 |
1接続あたりのメモリ使用量 = 3956KB / 1024 = 約3.86MB |
この場合、1接続あたりのメモリ使用量は約3.86MBとなりますが、これはあくまでも目安であり、他の要因(キャッシュ、静的ファイルの配信、PHP-FPMの使用状況など)によって変動します。実際の使用状況を監視し、負荷テストを行って正確な値を確認することが必要。