abテストerror:connection reset by peerのソリューション

3599 ワード

いくつかのオープンソースプログラムを使用する前に、abツールを使用してサーバまたはローカルでパフォーマンス評価を行う可能性がありますが、サーバがabツールからのhttpリクエストを拒否し、error:connection reset by peerが現れることが多いので、どうすればいいですか.
まず、sql操作のあるページをテストするために、通常はログインが必要です.この場合、ユーザーに偽装して自動ログインを実現する必要があります.簡単な方法は、ブラウザ側にユーザーをログインし、chromeのdeveloper toolを開き、その中のcookieをコピーし、-H optionでcookie付きhttp要求を実現し、残りの同時タスクをabツールに渡します.httpごとにセッション対応のクッキーを携帯するようにし、これでOKになったら、基本的にこのweb appのセキュリティが考慮されることを説明し、これも初級ユーザーが無視する可能性がある問題である.
 
次に、ログインユーザーに偽装し、クッキーを携帯してもこのエラーが発生すると、通常はweb appソースコードにcsrf保護がオンになっているため、偽装の要求に対してフィルタリングを行い、この問題も比較的解決しやすい.オープンソースコードなので、ソースコードを開いて、このweb appのフレームワークレベルのconfigファイルを見つけることができる.あるいはアプリケーションレベルのイニシエータクラスであれば、このプログラムを簡単に見つけることができ、csrf保護をオフにすればいいです.以下、railsアプリケーションとsails.jsアプリケーションを例に、csrf保護を閉じる方法について説明します.
railsアプリケーション:controllerディレクトリの下にあるコードのApplicationController.rbファイル、csrf保護関数protect_from_何があったの?delete(auto_cookie_name)行コメントを削除します.またはprotect_from_forgeryコメントを削除します.コードは次のとおりです.
 
class ApplicationController < ActionController::Base
  include Redmine::I18n
  include Redmine::Pagination
  include RoutesHelper
  helper :routes
 
  class_attribute :accept_api_auth_actions
  class_attribute :accept_rss_auth_actions
  class_attribute :model_object
 
  layout 'base'
 
  protect_from_forgery
  def handle_unverified_request
    super
    #cookies.delete(autologin_cookie_name)
  end
 
  before_filter :session_expiration, :user_setup, :check_if_login_required, :set_localization
 
  rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
  rescue_from ::Unauthorized, :with => :deny_access
  rescue_from ::ActionView::MissingTemplate, :with => :missing_template
 
  include Redmine::Search::Controller
  include Redmine::MenuManager::MenuController
  helper Redmine::MenuManager::MenuHelper
 
  def session_expiration
    if session[:user_id]
      if session_expired? && !try_to_autologin
        reset_session
        flash[:error] = l(:error_session_expired)
        redirect_to signin_url
      else
        #session[:atime] = Time.now.utc.to_i
      end
    end
  end

 
sailsならjs web appは、より簡単になります.configディレクトリの下にcsrfファイルがあり、csrfをfalseに設定すればいいです.
csrfをオフにすると、基本的にabテストでerror:connection reset by peerは現れません.
 
手元にソースコードがないweb appの性能テストに興味がある場合は、私の他の文章を参考にしてください.
 
参照先:
パケット損失dropwatchを確認します.http://blog.yufeng.info/archives/2497
ulimit問題とその影響:http://blog.yufeng.info/archives/1380