abを使用したApacheベンチマーク

abを使用したApacheベンチマーク

私はabを使用してApacheでパフォーマンステストを実行しています。私たちの場合、Apacheはロードバランサーの役割のみを実行して、2つのLiferayサーバー間のロードバランシングを行います。

最初は1000のリクエストと100の同時リクエストでテストしました。テストはうまく行われました。

ところで、同時ユーザー500人、リクエスト1000個でテストを実行すると、テストは失敗します。

$ ab -c 500 -n 1000 http://103.X.X.X/web/guest/statistics 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation,   

Benchmarking  (be patient)

Completed 100 requests
Completed 200 requests
Completed 300 requests

apr_socket_recv: Connection timed out (110)

Total of 386 requests completed

Kernel では、次の情報を表示できます。

May 13 14:21:15 www kernel: possible SYN flooding on port 80. Sending cookies.

次の2つのパラメータの値を増やしましたが、テストはまだ失敗し、システムログファイルに同じエラーが表示されます。

# echo "1024" > /proc/sys/net/core/somaxconn 
# echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog 

私たちはまもなくキャンペーンを開始する予定であり、私たちのサーバーに多くの視聴回数を受け取ることを期待しています。テストが失敗したため、私たちのサーバーが負荷に耐えることができるかどうか少し心配しました。イベント期間中、1日の同時リクエスト数は約500〜700件になると予想されます。

負荷に耐えるためにサーバーのパフォーマンスを向上させる方法を提案してください。

ベストアンサー1

ベンチマークの目的で syn_cookies を無効にする必要があります。

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

しかし、作業が完了したらもう一度有効にしてください!

サーバーが負荷を処理できない場合は、Webアプリケーションを最適化し、構成を調整し、一種のキャッシュを使用するか、ロードバランサーを備えたフロントエンドマルチサーバーを使用する必要があります。これはあなたのアプリケーションと期待される作業量によって大きく異なりますので、これ以上詳しく説明することはできません。たぶんnginxやvarnishのようなプロジェクトを見なければならないかもしれません。バックエンドにデータベースがありますか?たぶんこれもボトルネックになるかもしれません...

おすすめ記事