Tomcatのパフォーマンスチューニング
server.xmlファイルの内容を変更し、Tomcatのルートディレクトリの下のconfディレクトリを検索します。、私が学んできた曲のこの部分については、初期化時に作成されたスレッドの数と同時TomcatのTomcatサーバーの最大数の設定についてのセット以外の何ものでもありません、もちろん、他のパフォーマンスチューニングの設定があります
図はあなたにそれについての詳細な説明を与えるために、私は私のマシンのパフォーマンス設定を重視いくつかのパラメータに基づいています。
。1、はURIEncoding = "UTF-8":Tomcatの文字セットを設定します。
私たちはTomcatの文字セットがあまりにも硬すぎる変更を直接、特定のプロジェクトに文字化け特定の治療について変換されますので、この設定は、我々は一般的に、設定されていません。
2、 maxThreadsの= "300":同時現在のTomcatの最大数を設定します。
リクエストのTomcatの最大数のデフォルトの設定では、同時に150の同時をサポートすることができる、つまり、150です。
しかし実際には、同時ハードウェア性能の最大数とCPUの数は素晴らしい関係、より良いハードウェアを持って、より優れたプロセッサは、Tomcatは、より多くの同時をサポートするようになります。
一般的に、実際の開発では、アプリケーションは250以上の同時を持っている場合、アカウントにクラスタ化されたアプリケーション・サーバがかかります。
3、 minSpareThreads =「50」:現在のTomcatの初期に作成されたスレッドの数を設定し、デフォルト値は25です。
。4、 acceptCountをは=「250」に:同時接続maxThreadsの数は、パラメータセットの値に達すると、接続の数は、キューを受信することができるが、接続を拒否し、この接続を介して直接返します。処理要求が任意の数のスレッドが使用されている使用することができたときに指定し、要求の数は、より多くの処理されません要求の数よりも、キュー・プロセスに入れることができます。デフォルト値は100です。
実際には、あなたが同時のTomcatの数を増やしたい、とあれば、それはまたacceptCountをし、maxThreadsの値を大きくする必要があります。
5、 enableLookups =「false」の場合:通常、処理能力を高めるためにはfalseに設定し、逆引き参照ドメイン名を開くかどうか、その値も真、めったに使いません。
6、 maxKeepAliveRequests =「1」:nginxのダイナミック転送tomcatに、nginxのがキープアライブされていませんが、デフォルトで有効になってTomcatのエンドキープアライブ、キープアライブタイムアウトを待つことになる、デフォルトの設定はのConnectionTimeoutを使用しないことです。
タイムアウトのTomcatと近いキープアライブTomcatの設定が必要です。それ以外の場合は、Tomcatの多くTIMEWAITソケットを生成します。
maxKeepAliveRequests =「1」、それによってある程度離れダイTomcatを回避し、TomcatのTIME_WAITの接続を大量に回避することができます。
JVMのチューニング
Tomcatの自体またはJVM上で実行するには、JVMパラメータは、Tomcatを調整することによって、私たちはより良いパフォーマンスを持つことができます。
メモリチューニングとガーベジコレクションのポリシーの調整:現在JVMをチューニングするための2つの主要な側面を持っています。
メモリー・チューニング
後者は、JVMプロセスの起動パラメータとしてパラメータJAVA_OPTSを開始するためcatalina.sh WEN部材は、JAVA_OPTS変数に配置され、ルートディレクトリの下にTomcatのbinディレクトリを発見しました。
Java仮想マシンのメモリ構造がやや複雑であるだけでなく、私が理解する上で多くの人々は非常に抽象的であると信じて、それがヒープ、スタック、およびガベージコレクションのメソッドゾーンシステムのいくつかの部分に分かれているので、ここでは、インターネットからの私のチョップです図のメモリ構造:
のより合理的な使用にアプリケーションを有効にすることのメモリチューニングピース、自身のメモリ空間の大きさを変更することによって、より多くの何もありません、
図は私のマシンのパラメータ設定の自分のパフォーマンスに基づいているあなたにそれの様々なパラメータの意味について詳細な説明を与えます:
1、 -Xmx512mは:ヒープサイズ=サイズ+パーマネント生成サイズのサイズ+旧世代にわたって兆(M)、若い世代:Java仮想マシン、ユニットのヒープの最大利用可能なメモリサイズを設定します。
持久代一般固定大小为64m。堆的不同分布情况,对系统会产生一定的影响。尽可能将对象预留在新生代,减少老年代GC的次数(通常老年回收起来比较慢)。
实际工作中,通常将堆的初始值和最大值设置相等,这样可以减少程序运行时进行的垃圾回收次数和空间扩展,从而提高程序性能。
2、-Xms512m:设置Java虚拟机的堆的初始值内存大小,单位:兆(m),此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
3、-Xmn170m:设置年轻代内存大小,单位:兆(m),此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。一般在增大年轻代内存后,也会将会减小年老代大小。
4、-Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,以前每个线程栈大小为256K。更具应用的线程所需内存大小进行调整。
在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
5、-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 。
6、-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6。
7、-XX:MaxPermSize=16m:设置持久代大小为16m,上面也说了,持久代一般固定的内存大小为64m。
8、-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。
如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。
如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
二、垃圾回收策略调优
找到Tomcat根目录下的bin目录,也是设置catalina.sh wen件中JAVA_OPTS变量即可。
我们都知道Java虚拟机都有默认的垃圾回收机制,但是不同的垃圾回收机制的效率是不同的,正是因为这点我们才经常对Java虚拟机的垃圾回收策略进行相应的调整。
下面也是通过我的一些需求来配置的垃圾回收策略:
Java虚拟机的垃圾回收策略一般分为:串行收集器、并行收集器和并发收集器。
串行收集器:
1、-XX:+UseSerialGC:代表垃圾回收策略为串行收集器,即在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,主要在JDK1.5之前的垃圾回收方式。
并发收集器:
1、-XX:+UseParallelGC:代表垃圾回收策略为并行收集器(吞吐量优先),即在整个扫描和复制过程采用多线程的方式来进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式。
此配置仅对年轻代有效。该配置只能让年轻代使用并发收集,而年老代仍旧使用串行收集
2、-XX:ParallelGCThreads=4:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
。3、 -XX:+ UseParallelOldGC:設定し、旧世代のガベージコレクションが並行して収集されます。パラレルコレクターの旧世代のためのJDK6.0のサポート。
4、 -XX:MaxGCPauseMillis = 100:あなたはこの時間を満たすことができない場合には、たびに最大の時間を若い世代のガベージコレクションを設定し、JVMが自動的にこの値を満たすために若い世代のサイズを調整します。
。5、 -XX:+ UseAdaptiveSizePolicy:このオプションが設定され、自動的に最も低い目標周波数に対応した若い世代領域のサイズと対応するレートサバイバー領域、所定の時間を選択するか、システムを収集するパラレルコレクタは、この値は、並列コレクタを使用することが推奨されますデバイスが開かれたとき。
同時コレクター:
1、 -XX:+ UseConcMarkSweepGCを:コレクタの代わりに同時ガベージコレクションの方針。
まあ、そんなに私のために、このガベージコレクションポリシーの概要仮想マシン、またはこの文である:最適化された学習は、道路にされている、図内の他のブログから盗むされている以下の、これらの3つのメカニズムがGCであると言われています私たちは、使用することを満たす必要があります。