그리고 톰캣 JVM 튜닝 경험을 요약! 시에 멀리하지

톰캣 성능 튜닝

, 톰캣 루트 디렉토리 아래 conf 디렉토리를 찾아 server.xml 파일의 내용을 수정합니다. 내가 배운 곡의이 부분을 초기화하는 동안 생성 된 스레드의 수와 동시 톰캣 Tomcat 서버의 최대 수를 설정하는 방법에 대한 설정에 지나지 않는다 물론, 다른 성능 튜닝 설정이 있습니다

그림은 내가 당신에게 그것에 대해 자세한 설명을 제공하기 위해, 내 컴퓨터 성능 설정을 소중히 일부 매개 변수를 기반으로 :

그리고 톰캣 JVM 튜닝 경험을 요약!  시에 멀리하지


. 1, URIEncoding = "UTF-8."톰캣 문자 집합을 설정합니다.

우리가 직접 특정 프로젝트에 깨진 특정 치료에 대해 변환 톰캣 문자 집합이 너무 너무 단단 수정 때문에이 구성은 우리가 일반적으로 설정되어 있지 않습니다.

2 maxThreads은 = "300"동시 전류 톰캣의 최대 수를 설정한다.

요청 톰캣 최대 수의 기본 구성은 동시에 150 동시을 지원할 수, 즉, 150이다.

그러나 실제로는, 동시 하드웨어 성능의 최대 수와 CPU의 수는 큰 관계, 더 나은 하드웨어를 가지고, 더 나은 프로세서는 Tomcat이 더 많은 동시를 지원하게됩니다.

응용 프로그램이 250 개 이상의 동시가있는 경우 일반적으로 실제 개발에, 계정에 클러스터 응용 프로그램 서버를 취할 것입니다.

3, minSpareThreads = "50": 현재 톰캣 초기화, 기본 값이 25 일 때 생성되는 스레드의 수를 설정합니다.

. 4, acceptCount은 = "250"다음 동시 연결 maxThreads의 개수, 파라미터 세트의 값에 도달하면, 연결의 수는 수신 큐있다이 연결은 연결을 거절 바로 위에 반환한다. 처리 요구가 스레드의 수는 사용되는 경우에 사용될 수 지정 요청 횟수 이상 처리되지 요청의 수보다, 큐 처리에 넣을 수있다. 기본값은 100입니다.

실제로, 동시 톰캣의 수를 늘리려면, 그리고 경우도 acceptCount 및 maxThreads의 값을 늘려야합니다.

5 enableLookups은 = "FALSE"통상의 처리 용량을 증가시키기 위해 거짓으로 설정 역방향 조회 도메인 이름을 열 것인지, 그 값도 마찬가지 거의 사용하지 않는다.

6 maxKeepAliveRequests = "1": nginx를 동적 전송 바람둥이, nginx를 연결 유지되지 않지만, 기본적으로 활성화 바람둥이 엔드 킵 얼라이브, 킵 얼라이브 타임 아웃을 기다리는 기본 설정은 ConnectionTimeout을 사용하지 않는 것입니다.

이 타임 아웃 바람둥이와 가까운 킵 얼라이브 바람둥이의를 설정하는 것이 필요하다. 그렇지 않으면 바람둥이의 소켓 시간 대기를 많이 생성합니다.

maxKeepAliveRequests은 = "1"로함으로써, 어느 정도 떨어져 톰캣 다이 피 톰캣 TIME_WAIT 연결 다량 피할 수있다.

JVM 튜닝

톰캣 자체 또는 JVM에서 실행은, JVM 매개 변수는 Tomcat을 조정하여 우리는 더 나은 성능을 가질 수 있습니다.

메모리 튜닝 및 가비지 컬렉션 정책 조정 : 현재 튜닝의 JVM은 두 가지 측면을 가지고있다.

메모리 튜닝

후자는 JVM 프로세스 시작 매개 변수로 매개 JAVA_OPTS 시작하므로 루트 디렉토리 아래에 톰캣 bin 디렉토리는 catalina.sh 웬 부재 JAVA_OPTS 변수에 배치.

Java 가상 머신의 메모리 구조가 다소 복잡하다 게다가, 내가 이해에 많은 사람들이 매우 추상적 믿고, 그것은 힙, 스택, 쓰레기 수집 방법 존 시스템의 여러 부분으로 나누어 져 그래서, 여기에 인터넷에서 내 갈비입니다 도 메모리 구조 :

그리고 톰캣 JVM 튜닝 경험을 요약!  시에 멀리하지


그것의 메모리 튜닝 조각, 자신의 메모리 공간의 크기를 수정하는 응용 프로그램을 활성화하여보다 아무것도 더 합리적인 사용에

그림은 내 컴퓨터 매개 변수 설정의 제 성능을 기반으로 당신에게 그것의 다양한 매개 변수의 의미에 대한 자세한 설명을 제공합니다 :

그리고 톰캣 JVM 튜닝 경험을 요약!  시에 멀리하지


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虚拟机的垃圾回收策略进行相应的调整。

下面也是通过我的一些需求来配置的垃圾回收策略:

그리고 톰캣 JVM 튜닝 경험을 요약!  시에 멀리하지


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 : 콜렉터 대신 동시 가비지 컬렉션 정책.

음, 너무 많은 나를 위해이 가비지 컬렉션 정책 요약 가상 머신, 또는이 문장되어 최적화 된 학습이 도로에있다,는 A 그림에있는 다른 블로그에서 훔쳐 다음, 이러한 세 가지 메커니즘은 GC이다라고 우리가 사용하는 충족해야합니다.

그리고 톰캣 JVM 튜닝 경험을 요약!  시에 멀리하지


추천

출처blog.51cto.com/14480698/2438284