ワニスは170回繰り返されます。

ワニスは170回繰り返されます。

私はnginx + varnishを使用しています。 ~22GB/32GBを使用していることがわかりました。

私はhtopを見て、約170の重複したワニスパスを見つけました。何が問題なのか教えてください。どこから見てみましょうか?

ここに画像の説明を入力してください。

答え1

スレッド

あなたが見るのは、htopニスのプロセスではなく、ニスのパターンです。

Varnishには長期実行プロセスが2つしかありません。

  • メインプロセス(ユーザー所有varnish
  • ワーカープロセス(vcacheユーザー所有)

このように多くの理由は、Varnishがシステムがトラフィックの急増を処理するのに十分な反応を望んでいるからです。新しいスレッドを作成すると、リソースの面で費用がかかり、システムの速度が低下する可能性があります。

これが、Varnishが基本的にそれぞれ100個のスレッドを含む2つのスレッドプールを持つ理由です。需要が高まるにつれて、Varnishはスレッドプールあたり5,000スレッドに拡張できます。

thread_pool_minこの数値はランタイム設定で設定できますthread_pool_max

アクティブスレッドは少なくとも200個、最大10,000個です。

次のようにして、これらの値を表示できます。

varnishadm param.show thread_pool_min
varnishadm param.show thread_pool_max

デフォルト値を変更するには、addプロセス-p thread_pool_min=x-p thread_pool_max=xtoプロセスを使用できます。varnishdこれらの値は各スレッドプールに適用され、スレッドプールが2つなので、最小値と最大値に2が掛けられることを忘れないでください。

実行すると、varnishstat -f MAIN.threads現在アクティブなスレッド数が表示されます。

メモリ

Varnishのメモリ消費は、部分的にはキャッシュ内のオブジェクトに依存し、部分的にはワーカースレッド内のアクティビティによって異なります。

オブジェクトストレージ

-sランタイムパラメータはvarnishdオブジェクトキャッシュのサイズを制限します。ただし、一時コンテンツを保存してキャッシュできないデータを一時的にホストするバインドされていない一時ストアもあります。

次のコマンドを使用すると、オブジェクトと一時記憶域を監視できます。

varnishstat -f "SMA.*.g_bytes" -f "SMA.*.g_space"
  • SMA.s0.g_bytes使用中のオブジェクトメモリの量を監視します。
  • SMA.s0.g_spaceオブジェクトストレージに残っているスペースの量を監視します。
  • SMA.Transient.g_bytes使用中の一時メモリ記憶域の量を監視します。
  • SMA.Transient.g_space使用可能な一時メモリー・ストレージの量をモニターします。一時ストアはデフォルトでは無限であるため、ほとんどの場合、この値はゼロでなければなりません。

キャッシュ内の各オブジェクトには、メモリ消費の面でも少しオーバーヘッドがあります。これはかなり小さいが、キャッシュ内のオブジェクトの数が多いほどオーバーヘッドが大きくなります。

次のコマンドを使用すると、キャッシュ内のオブジェクトの数を確認できます。

varnishstat -f MAIN.n_object

ワークスペースメモリ

スレッドもメモリを消費します。各スレッドには、状態追跡に使用できるワークスペースメモリがあります。

  • これクライアントワークスペースに設定されています64KBクライアント要求を処理するワーカースレッドで使用される各スレッド
  • これバックエンドワークスペースバックエンド接続に参加するために使用されるワーカースレッド。各スレッドは以下を消費することもできます。64KBスレッドごと
  • これセッションワークスペースTCPセッション情報を保存するために使用されます。これらのそれぞれ

次のコマンドを使用して、各ワーカースレッドタイプのワークスペース制限を表示できます。

varnishadm param.show workspace_client
varnishadm param.show workspace_backend
varnishadm param.show workspace_session

スタックスペース

各ワーカースレッドはスタックスペースを使用することもできます。これはVarnishが依存するライブラリで使用されます。スレッドごとのデフォルトの制限は次のとおりです。48KB

次のコマンドを使用すると、システムの制限を確認できます。

varnishadm param.show thread_pool_stack 

結論として

光沢キャッシュ、オープンソースバージョンのVarnishは、独自の合計メモリスペースを制限することはできません。オブジェクトのストレージを制限できます。一時ストレージのサイズを制限することもできますが、これはいくつかの迷惑な副作用を引き起こす可能性があります。

デフォルトでは、キャッシュサイズ、一時ストレージ、トラフィックパターンによって異なります。

光沢会社総メモリ使用量を制限する機能。 Varnishの商用バージョンで、専用ストレージエンジンであるVarnishを提供します。MSE(大容量ストレージエンジン)

平均二乗誤差という機能があります。メモリマネージャオブジェクトストレージ、一時ストレージ、ワークスペースメモリ、スタックスペースを考慮します。不均衡がある場合、平均二乗誤差追加のメモリ要件を満たすために、キャッシュサイズが縮小されます。

関連情報