サーバーのパフォーマンスの最適化ガイド

            「バックエンドサービスのパフォーマンスの最適化ガイド」

 

 

ディレクトリ

まず、 サーバーのオペレーティングシステム 2

二、ウェブサーバー/ リバースプロキシサーバ(nginxの 2

第三に、 アプリケーションサーバ( Tomcatの 2

第四に、 アプリケーションログの設定 2

第五に、 データベース( MySQLの 3

第六に、 データベース接続プール 3

七、 RESTfullのサービスを呼び出す 4

 

 

まず、サーバオペレーティングシステム

図1に示すように、すべてのプロセスがグローバル制限を共有しました

   ビューシステムは、最大数のハンドル    猫の/ proc / sysのの/ fsの/ファイル・NRの
レビューを: /etc/sysctl.confの
fs.file-MAX = 100000
net.ipv4.ip_conntrack_max = 100000
net.ipv4.netfilter.ip_conntrack_max = 100000

2、最大の単一のプロセスハンドル

   サーバー構成のデフォルト 1024

プロセスの最大数を確認   のulimitは、-u
  プロセスがハンドルの最大数を表示する -n ulimitの
          修正を: /etc/security/limits.confをします

*ソフトNOFILE = 32768

*ハードNOFILE = 65536

すべてのユーザーのための最大のオープンハンドルシングルスレッド、ソフトリミット 32768 、ハードリミット65536 ;

3、TCP コネクションの生存時間は、レイテンシの接続が閉じられています

  変更に/etc/sysctl.confに以下の行を追加し、:
  #1 のデフォルトTIMEOUTの期間
net.ipv4.tcp_fin_timeout = 30

甲斐の再利用が可能にTIME_WAITソケット新たに再使用のTCP デフォルトで接続0はオフ表す
net.ipv4.tcp_tw_reuse = 1

オープンTCP 接続のTIME_WAITソケットすばやくデフォルトで回復0はオフを表し
net.ipv4.tcp_tw_recycle = 1

4、使用のuname -a システムのカーネルバージョンを表示するコマンドを、ことを確認して、Linuxのカーネルのバージョンよりも高い2.6.28は このリリースの Linuxのサポート効率的な非同期IOのモデルのepollはJDKがNIOの開発キットは、ペアが含まれている場合、オペレーティングシステムのバージョン番号の前に(分析のLinux> 2.6 ときに呼び出さのepoll ネイティブ方式)、ジャワのNiOがされ、オペレーティングシステムによって決定されたIOモデルにより達成。

 

二、ウェブサーバー/ リバースプロキシサーバ(nginxの

nginx.conf プロフィール:

5、nginxの単一のワーカープロセスは、外部接続の最大数を確立するために、

worker_connections 16000

6、nginxのハンドルを開くことができるプロセスの最大数

worker_rlimit_nofile 65535

7、nginxののワーカープロセス

worker_processes 8 [ 一般設定CPU 核の二重数]

第三に、アプリケーションサーバ( Tomcatの

図1に示すように、作るコネクタをするように構成されているNIOのモード、および接続の適切な最大数を設定(springboot 埋め込みTomcatのデフォルトはNIO 、接続の最大数MAX-接続デフォルト10000

2、調整 Tomcatのワーカースレッドキューキューの長さの数

    server.tomcat.max-スレッド= 800

server.tomcat.acceptカウント= 200

第四に、アプリケーションログの設定

1は、アプリケーションが現在のベストプラクティスログ sl4j + logbackをコードを使用する必要があり、sl4j ファサードを記録し、直接使用禁止log4jの具体的な実現を。

2、いくつかの非常に同時サービスに低減するように最適化ログ非同期ことを検討すべきである IOを改善するための時間を遮断するCPUの使用率を:

    <アペンダ名= "syslogの"

              クラス= "ch.qos.logback.core.rolling.RollingFileAppender">

       ......

    </アペンダ>

    

<アペンダ名= "ASYNC_ROLLING_FILE" クラス= "ch.qos.logback.classic.AsyncAppender">

<QUEUESIZE> 256 </ QUEUESIZE>

<includeCallerData>真</ includeCallerData>

<アペンダ-REF REF = "syslogの" />

</アペンダ>

    <ルートレベル= "INFO">

        <! - <アペンダ-REF REF = "STDOUT" /> - >

        <アペンダ-REF REF = "ASYNC_ROLLING_FILE" />

</ルート>

          Logback 提供AsyncAppender 内蔵非同期ログ出力キュー、デフォルト用いて256をパフォーマンスを保証するためにの長さにわたって 80%の落下開始エラー外部ログ。

プロパティ名

タイプ

デフォルト値

説明

QUEUESIZE

int型

256

内蔵BlockingQueueの最大容量

discardingThreshold

int型

-1

しきい値のBlockingQueue(80%)よりも高い容量は、ERRORログレベルを破棄する際、デフォルトで、あなたは(両方ともたびに合計金額を格納)のログを破棄したくない、それが0に設定されますが、キューがいっぱいの場合することができます破棄は、すべてのログ情報をエンキューするとき、1(デフォルト値)に設定することをお勧めします。ログは、通常のように廃棄することができ、それが大幅にパフォーマンスを向上させ、重大なエラーログを保存することができます。

 

includeCallerData

ブーリアン

発信者データを抽出するコストは非常に高価です。イベントがキューに追加されたときに、デフォルトでは、パフォーマンスを向上させるために、発呼者に関連付けられているイベント・データが抽出されません。こうしたスレッド名としてデフォルトでは、唯一の「安い」データ、。ログの例行番号trueに設定された値の出力が必要かどうかのために。測定includeCallerData = trueが、いくつかのパフォーマンスの低下をもたらすが、それでも遠くTPS非常に高への同時同期ログの道ます。

 

第五に、データベース( MySQLの

ストレステストを行うことで、私はこの分野での主要な問題を解決するために、データベース接続の数だけでなく、いくつかの長いスロークエリ、次のような構成に制限を見つけました

以下のパラメータが再起動後に有効に、データベースのデータベースな/etc/my.cnf修飾することができます。

図1に示すように、接続の最大数と、次のように提供されたデータベースに接続しているユーザーの最大数、

= 1000 MAX_CONNECTIONS (デフォルト 151)

MAX_USER_CONNECTIONS = 1000

2 、一時テーブルのサイズの間に生成されたクエリができます使用を行う場合max_heap_table_sizeクエリに参加し、tmp_table_sizeを設定します。パラメータ max_heap_table_size よりtmp_table_size 時間は、システムがあろうmax_heap_table_size 最大メモリ一時テーブルとして上限値を、これよりも大きい場合、書き換え可能なハードディスク増加ヒープテーブルのサイズは、同等の効果は、クエリの速度に参加することができます

以下のような:

200M = tmp_table_size (デフォルト 16M)

max_heap_table_size = 500M (默认 16M)

 

。3 read_buffer_sizeとして:れるMySQLはバッファサイズに読み込まれバッファに読み込まシーケンシャルスキャンを割り当てるテーブルの要求を、 MySQLはそれのためにいくつかのメモリ・バッファを割り当てます。read_buffer_size 変数は、バッファのサイズを制御します。テーブルの順次スキャンの要求が非常に頻繁に、そして場合、このような頻繁なスキャニングが遅すぎることが、その性能は、変数の値、及びメモリ・バッファ・サイズを増加させることによって改善することができます。

次の設定:

sort_buffer_size = 8M 

read_buffer_size = 8M 

read_rnd_buffer_size = 8M 

join_buffer_size 、すなわちであるテーブルは、結合会合を:のような、 join_buffer_size = 8M

第六に、データベース接続プール

Tomcat、JDBC 接続プール、例えば、のような他の接続プールDBCP C3P0 ドルイドなど。

図1に示すように、コアポータルユーザ識別データベース接続プールパラメータは、いくつかのアプリケーションを変更するユーザの最大接続MAXACTIVEのためのアイドル最大maxIdle  300 、最小アイドルminIdle 、初期数INITIALSIZE  60 ; ポータル\コア\アイデンティティ:最大接続、最大アイドル100 最小アイドル最初の数 20 ;初期の他の用途5 最大20

2は、本番環境でのオフtestOnBorrow testOnReturn設定をfalseに)主に接続失敗を通じて、 testWhileIdle 保証します

七、Restfullサービスコール

1、ホットスポットサービスを直接利用を許可しない JDK 自身java.net.URLConnectionが可能HTTPクライアントの呼び出し

2、使用することが推奨されるのApacheのHttpClientをokhttp ような接続プーリングモードとして、HTTP ライブラリ、残りのサービス呼び出し、接続を確立するために、繰り返しのオーバーヘッドを削減します。ベースのスプリングテクノロジー・スタックのアプリケーションより良い練習が使用することですrestTemplateを上記の実装を設定します。

3は、ApacheのHttpClientを流暢APIは、自身に基づいて、基礎となるのHTTPClientの接続プールモード、前記コード書かれて死んだmaxTotal maxPerRoute 共通接続プールの総使用するすべての要求200台の接続、各目的地までを100台の接続が。高い並行処理のボトルネックがあるでしょう、ホットアプリケーションが使用することは推奨されません。

 

おすすめ

転載: www.cnblogs.com/lyhero11/p/11302959.html
おすすめ