적절한 Tomcat 5.5 매우 높은 수요, 대형 힙 웹 응용 프로그램을 위해 JVM을 조정하는 시작 매개 변수?

StackOverflow https://stackoverflow.com/questions/202502

  •  03-07-2019
  •  | 
  •  

문제

우리는 최근 Tomcat 4에서 Tomcat 5.5로 대규모로 높은 수요 웹 응용 프로그램을 마이그레이션했으며 JVM 일시 중지와 관련이있는 것으로 보이는 독특한 둔화 동작을 발견했습니다. Tomcat 4에서 애플리케이션을 실행하고 시간이 지남에 따라 많은 표준 JVM 매개 변수가 설정되어 조정되지 않았으며 Tomcat JVM Tuning Experience를 가진 사람이 해칠 수있는 모든 것에 대해 언급 할 수 있기를 바라고 있습니다. Tomcat 5.5에 설치하십시오. 또한 이들 중 일부는 이전 버전의 Java에서 이월 될 수 있습니다 (우리는 Java 1.6에서 Tomcat 4를 실행하고 있었지만이 매개 변수는 한동안 성공적으로 수행했지만 일부는 우리의 Tomcat 4는 오랫동안 설치하고 이제는 선보다 더 많은 해를 끼칠 수 있습니다).

몇 가지 메모 :

  • 애플리케이션 메모리 발자국은 약 1GB 일 것입니다.
  • CPU는 문제가되지 않습니다 - 앱 (로드 밸런스)을 제공하는 모든 기계는 <30% CPU입니다.
  • 기계의 물리적 메모리에 대한 많은 헤드 룸.
  • -XX : MaxPermsize = 512m는 5.5 업그레이드의 일부로 추가 된 유일한 매개 변수였으며 Outfemory Permgen Space Issue (해결)에 반응했습니다.
  • Java 1.6, Solaris OS에서 실행

-server -xms1280m -xmx1280m -xx : maxpermsize = 512m -xx : parelygcthreads = 20 -xx :+useconcmarksweepgc -xx :+useparnewgc -xx : survivorratio = 8 -xx : targetsurvivorratio = 75 -xx : maxtenurthehhholdexx : maxtenurning thexx : maxtenurning. attressiveOpts -xx :+printgcdetails -xx :+printgctimestamps -xx : -traceclassunloading-dun.io.usecanOncaches = false -dsun.net.client.defaultConnectTimeout = 60000-dsun.net.client.defaultreadTimeout = 60000

도움이 되었습니까?

해결책

Java 챔피언 중 하나 인 Kirk Pepperdine의 블로그 : http://kirk.blog-city.com/how_to_cripple_gc_ergonomics.htm.
견적 1 "GC 문서는 설정에 영향을 미치지 만 종종 효과가 무엇인지 알지 못하는 경우가 종종 있습니다. 도로에서 잘못된 포크를 취한 가장 큰 단서는 값을 명시 적으로 설정 한 다음 GC에 힌트를주는 것입니다. 인체 공학적. 또 다른 단서는 설정을 조정해야 할 건전한 이유가 없다면, 소위 전문가 가이 설정이 가장 잘 작동한다고 말하면 소음뿐만 아니라 사운드가 아니라 이유가 아닙니다. "

QUOTE 2 "이전 블로그 항목에서 언급 한 바와 같이, 당신이 그렇게할만한 이유가 없다면 손잡이를 만지지 마십시오. 손잡이를 만질 필요가 있다면, 인체 공학을 돕는 것만 사용하여 가볍게 tred. 그 점은 일시 정지 시간과 처리량 목표를 충족시키는 인체 공학 능력을 무너 뜨린 것입니다. "

그래서 나는 당신이 평원으로 돌아갈 것을 제안합니다
-server -xms1280m -xmx1280m -xx : maxpermsize = 512m -xx :+useconcmarksweepgc -xx :+printgcdetails -xx :+printgctimestamps -xx : -traceclassunloading-dsun.io.usecanoncaches = fallinge.net.net.net.net.net.net.net.net.net.net.net.net.net.net.net.net.net. -dsun.net.client.defaultreadTimeout = 60000

더 나은 성능을 제공하는지 확인하십시오. 그렇다면, 그것을 고수하십시오
btw, -xx : maxpermsize = 378m에 문제가 있습니까?
Java 1.6은 1.4보다 훨씬 나은 인체 공학을 가지고 있습니다. 1.4 미만으로 조정하고 싶을 수도 있습니다
BTW, Tomcat 6을 사용해 보셨습니까? Tomcat 6은 Tomcat 5.5보다 Java 6에서 훨씬 더 잘 달려 있습니다.

추신 : 나는 지금 Tomcat을 잠시 동안 사용해 왔으며 일반적으로 여기저기서 약간의 튜닝으로 Sun의 JDK 무료 통치를하려고 노력합니다.

다른 팁

Tomcat Tomcat에서 Tomcat 개발자의 웹 세미나를 방금 찾았습니다. http://springsource.com/node/555. 웨비나에 대한 후속 조치 : http://blog.springsource.com/2008/10/14/optimising-and-tuning-apache-tomcat-part-2/

Br,
~ a

이것을 엉망으로 만들고있는 사람으로서, 나는 특히 응용 프로그램에 따른 것들이 어떻게되는지를 감안할 때 확실히 결정적인 답을 가지고 있지 않습니다. 당신이 볼 수있는 좋은 참조는 다음과 같습니다.

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

그러나 JVM 매개 변수의 꽤 긴 목록으로, 특히 제작 앱에서는 좋지 않은 몇 가지 디버깅 옵션 (printgcdetails, printgctimestamps, traceclassunloading)에 몇 가지 디버깅 옵션이 있음을 고려할 때 불필요한 매개 변수가 설정되어 있음을 시사합니다. 60 초 타임 아웃도 자원을 먹는 것일 수도 있습니다. "서버"는 기본이지만 아무런 해를 끼치 지 않습니다.

애플리케이션은 최소 조정 매개 변수 (JVM Size, MaxPermsize)로 어떻게 실행됩니까?

Tomcat이 요청을 처리하는 데 사용할 스레드의 최소 수를 변경하는 것을 살펴볼 수도 있습니다. conf/server.xml:

<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" ...

내가 이전 직업에서 들었던 한 가지 경험의 규칙은 Maxthreads가 당신이 다룰 것으로 예상되는 동시 연결의 양과 같아야한다는 것입니다. 그래도 클라이언트가 자신의 요청을 처리하기 위해 스레드가 자유로워지기를 기다리는 것을 막기를 원하지 않기 때문에 확실히 말이되는지 확실하지 않습니다.

또한 쓰레기 수집 모델의 차이가 응용 프로그램에 적합한 지 확인하기 위해 대체 JVM (예 : JROCKIT)을 실험하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top