1

memcached に問題があります。memcached、php、または tcp ソケットかどうかはわかりませんが、memcached を使用したページに対して 50 以上の同時実行でベンチマークを試みるたびに、Apache ab を使用してそれらのリクエストの一部が失敗しました。(99) 要求されたアドレスを割り当てられませんというエラーが表示されます。

通常の phpinfo() ページに対して 5000 の同時実行テストを実行すると。すべて順調。失敗したリクエストはありません。

memcached は高い同時実行性をサポートできないようですが、何か不足していますか? -c 5000 フラグを付けて memcached を実行しています。


サーバー: (2) クアッドコア Xeon 2.5Ghz、64GB RAM、4TB Raid 10、64bit OpenSUSE 11.1

4

4 に答える 4

5

わかりました、私はそれを理解しました。たぶん、これは同じ問題を抱えている他の人を助けるでしょう。

問題は、物事の組み合わせである可能性があるようです。

  1. lighttpd.conf の server.max-worker をより大きな数値に設定します。元の: 16 現在: 32

  2. lighttpd.conf で keep-alive をオフにすると、接続が長時間開かれたままになっていました。server.max-keep-alive-requests = 0

  3. ulimit -n open files をより大きな数に変更します。ulimit -n 65535

  4. Linux を使用している場合: server.event-handler = "linux-sysepoll" server.network-backend = "linux-sendfile"

  5. max-fds server.max-fds = 2048 を増やします

  6. リサイクルする前に tcp TIME_WAIT を下げます。これにより、接続をより速く閉じることができます。/etc/sysctl.conf に以下を追加: net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 3

    /sbin/sysctl -p で強制的にリロードしてください。


変更を行った後、サーバーは現在、30,000 の同時接続と 1,000,000 の同時リクエストを実行しており、問題、リクエストの失敗、または apache ab での書き込みエラーは発生していません。

ベンチマークに使用するコマンド: ab -n 1000000 -c 30000 http://localhost/test.php

私の Apache は、このベンチマークにさえ近づくことができません。Lighttd で Apache を笑わせることができるようになりました。Apache は約 200 の同時実行でクロールします。

于 2009-08-14T23:21:32.427 に答える
0

私はファイルで似たようなものをテストしました。

$mc = memcache_connect('localhost', 11211);
$visitors = memcache_get($mc, 'visitors') + 1;
memcache_set($mc, 'visitors', $visitors, 0, 30);
echo $visitors;

nginx、php-fastcgi、およびmemcachedを備えた小さな仮想マシンで実行されます。

ab -c 250 -t 60 http://testserver/memcache.phpエラーが発生することなく、同じネットワーク内のラップトップから実行しました。

エラーはどこに表示されますか?あなたのphpエラーログに?

于 2009-08-14T21:07:36.363 に答える
0

テスト目的でページ カウンターとして使用する 4 バイトの整数のみを使用しています。他の php ページは、5,000 の同時接続と 100,000 のリクエストでも問題なく動作します。このサーバーには多くの馬力とRAMがあるので、それが問題ではないことはわかっています.

死んでいるように見えるページには、memcached を使用してページ カウンターをテストするためのコードが 5 行しかありません。接続すると次のエラーが表示されます: (99) 要求されたアドレスを割り当てることができません。

  • この問題は、50 の同時接続から発生し始めます。
  • -c 5000 で memcached を 5000 同時実行で実行しています。
  • すべてが 1 台のマシン (ローカルホスト) にある
  • 実行中の唯一のプロセスは、SSH、Lighttpd、PHP、および Memcached です。
  • このボックス (テスト マシン) に接続しているユーザーはいません
  • Linux -nofile は 32000 に設定されています

今のところこれだけですので、情報がわかり次第追記していきます。この問題を抱えている人はかなり多いようです。

于 2009-08-14T20:01:00.490 に答える