私は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のようなプロジェクトを見なければならないかもしれません。バックエンドにデータベースがありますか?たぶんこれもボトルネックになるかもしれません...