web-dev-qa-db-ja.com

Memcachedの遅延

これは このトピック へのフォローアップの質問であると言って、この前置きをさせてください。

これは、memcachedサーバーをSolaris(SmartOS)からUbuntuに切り替えることで「解決」されました。現在、負荷を約5倍に増やしており、再び問題が発生しています。

約1000リクエスト/分を実行しているサイトを実行しています。各リクエストは約3回の読み取りと1回の書き込みでMemcachedにヒットします。したがって、負荷は1秒あたり約65リクエストです。キャッシュ内の合計データは約37Mであり、各キーにはごく少量のデータ(JSONでエンコードされた1K未満の整数の配列)が含まれています。

これらのページにベンチマークスクリプトを設定し、ログに記録するためにデータをStatsDにフィードしました。問題は、Memcachedが応答するのに非常に長い時間がかかるスパイクがあることです。これらは、トラフィックの急増とは相関していないようです。

Execution Time from StatsD

これらのスパイクの原因は何でしょうか? memcachedが応答するのに1秒以上かかるのはなぜですか?プールに配置するために2台目のサーバーを起動したところ、スパイクの頻度や重大度に目立った違いはありませんでした。

これは、サーバーでのgetStats()の出力です。

Array
(
    [-----------] => Array
        (
            [pid] => 1364
            [uptime] => 3715684
            [threads] => 4
            [time] => 1336596719
            [pointer_size] => 64
            [rusage_user_seconds] => 7924
            [rusage_user_microseconds] => 170000
            [rusage_system_seconds] => 187214
            [rusage_system_microseconds] => 190000
            [curr_items] => 12578
            [total_items] => 53516300
            [limit_maxbytes] => 943718400
            [curr_connections] => 14
            [total_connections] => 72550117
            [connection_structures] => 165
            [bytes] => 2616068
            [cmd_get] => 450388258
            [cmd_set] => 53493365
            [get_hits] => 450388258
            [get_misses] => 2244297
            [evictions] => 0
            [bytes_read] => 2138744916
            [bytes_written] => 745275216
            [version] => 1.4.2
        )

    [-----------:11211] => Array
        (
            [pid] => 8099
            [uptime] => 4687
            [threads] => 4
            [time] => 1336596719
            [pointer_size] => 64
            [rusage_user_seconds] => 7
            [rusage_user_microseconds] => 170000
            [rusage_system_seconds] => 290
            [rusage_system_microseconds] => 990000
            [curr_items] => 2384
            [total_items] => 225964
            [limit_maxbytes] => 943718400
            [curr_connections] => 7
            [total_connections] => 588097
            [connection_structures] => 91
            [bytes] => 562641
            [cmd_get] => 1012562
            [cmd_set] => 225778
            [get_hits] => 1012562
            [get_misses] => 125161
            [evictions] => 0
            [bytes_read] => 91270698
            [bytes_written] => 350071516
            [version] => 1.4.2
        )

)

編集:これは、10,000個の値のセットと取得の結果です。

通常:

Stored 10000 values in 5.6118 seconds.
Average: 0.0006
High: 0.1958
Low: 0.0003

Fetched 10000 values in 5.1215 seconds.
Average: 0.0005
High: 0.0141
Low: 0.0003

スパイク時:

Stored 10000 values in 16.5074 seconds.
Average: 0.0017
High: 0.9288
Low: 0.0003

Fetched 10000 values in 19.8771 seconds.
Average: 0.0020
High: 0.9478
Low: 0.0003
6
Brad Dwyer

ネットワークスタックに問題がある可能性があります。 memcachedに似た問題があり、原因はLinuxconntrackハンドラーが不足していました。スパイクの前後のnetstat-s -t出力をチェックして、tcpエラーと再送信をチェックできますか。また、wiresharkを使用してトラフィックダンプを調べ、問題の詳細を確認することもできます。

0
DukeLion

ネットワーク統計の調査に加えて、パフォーマンスが向上したバージョン1.4.10(またはそれ以降)へのアップグレードは可能ですか?から 1.4.10リリースノート

このリリースは、スレッドのスケーラビリティとパフォーマンスの向上に重点を置いています。このリリースでは、この記事の執筆時点で、どのネットワークカードもサポートできるよりも速くデータをフィードバックできるはずです。

私たちのサーバーはあなたのトラフィックを取得しませんが、私たちの場合、1.4.10へのアップグレードが役立ち、圧縮(1MBより大きい値がありました)とバイナリプロトコルを有効にしました。詳細については、 Drupal SE に関する私の回答を参照してください。

0
KM.