Tomcat 다운현상

프로그래밍/Library 2007. 11. 28. 09:31 Posted by galad
제목 : Tomcat 다운현상
글쓴이: 손님(guest) 2005/12/21 14:20:39 조회수:1098 줄수:53
프로젝트 마무리 단계로 고객측 서버에서 테스트를 하고 있는데, 잘되다가 멈춰버리면서 접근이 안되네요.
좀 기다렸다가 다시 접속하거나 또는 톰캣을 내렸다가 올리면 되는데, 근본적으로 원인을
찾아야 할것 같습니다.

우선 톰캣로그에는 항상 저런형태는 아니지만, 비슷한 에러가 자주 발생을 하는듯
하구요, 톰캣 실행은  -server -Xms128m -Xmx256m -verbosegc 옵션을 주고 있고,
서버환경은

HP-UX B.11.11
Tomcat 5.5.9
Java 1.5.0.02

입니다. 아 그리고, 오늘 다운됐을때 로그를 보니까 계속 Full GC가 반복해서 일어나고 있더라구요.



2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@aabe60, terminating thread
2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@7e6732, terminating thread
2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: unable to create new native thread) executing org.apache.jk.common.SocketAcceptor@221b8b, terminating thread
2005. 12. 21 오전 9:45:21 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@85a60, terminating thread
2005. 12. 21 오전 9:46:16 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 21 오전 9:46:25 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:50:41 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:50:54 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:51:59 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 21 오전 9:53:36 org.apache.catalina.connector.CoyoteAdapter service
심각: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:16 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:19 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:29 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@d9624, terminating thread
2005. 12. 21 오전 9:54:57 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:58:50 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
제목 : Re: verbosegc 로그를 올려봐요.
글쓴이: 이원영(javaservice) 2005/12/21 19:59:09 조회수:447 줄수:6
verbosegc 로그를 올려봐요.

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: GC 로그 입니다.
글쓴이: 손님(guest) 2005/12/22 10:31:31 조회수:502 줄수:135
좀더 자세하게 출력해보기 위해서 옵션을 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC 로
줘서 다시 실행시켜 보고 있는 중입니다. 

오늘 outofmemory 발생 이전의 일부분과 발생후의 로그를 올려봅니다.


{Heap before GC invocations=1454:
Heap
 PSYoungGen      total 141120K, used 126050K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 99% used [6e000000,74b1dd10,74b20000)
  from space 31424K, 52% used [76b60000,77b5ab68,78a10000)
  to   space 32512K, 0% used [74b20000,74b20000,76ae0000)
 PSOldGen        total 349568K, used 128281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 36% used [58800000,60546648,6dd60000)
 PSPermGen       total 31744K, used 29458K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564c4978,56700000)
56943.386: [GC [PSYoungGen: 126050K->22406K(132160K)] 254331K->160687K(481728K), 1.2878866 secs]
 Heap after GC invocations=1454:
Heap
 PSYoungGen      total 132160K, used 22406K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 0% used [6e000000,6e000000,74b20000)
  from space 22464K, 99% used [74b20000,76101850,76110000)
  to   space 35456K, 0% used [76800000,76800000,78aa0000)
 PSOldGen        total 349568K, used 138281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60f0a648,6dd60000)
 PSPermGen       total 31744K, used 29458K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564c4978,56700000)
} 
 {Heap before GC invocations=1455:
Heap
 PSYoungGen      total 132160K, used 132089K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 99% used [6e000000,74b1cc68,74b20000)
  from space 22464K, 99% used [74b20000,76101850,76110000)
  to   space 35456K, 0% used [76800000,76800000,78aa0000)
 PSOldGen        total 349568K, used 138281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60f0a648,6dd60000)
 PSPermGen       total 31744K, used 29492K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564cd1e0,56700000)
57028.604: [GC [PSYoungGen: 132089K->2203K(140672K)] 270370K->141300K(490240K), 0.1712235 secs]
 Heap after GC invocations=1455:
Heap
 PSYoungGen      total 140672K, used 2203K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 0% used [6e000000,6e000000,746c0000)
  from space 35456K, 6% used [76800000,76a26dc0,78aa0000)
  to   space 34048K, 0% used [746c0000,746c0000,76800000)
 PSOldGen        total 349568K, used 139096K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60fd6258,6dd60000)
 PSPermGen       total 31744K, used 29492K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564cd1e0,56700000)
}  {Heap before GC invocations=1456:
Heap
 PSYoungGen      total 140672K, used 107419K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 100% used [6e000000,746c0000,746c0000)
  from space 35456K, 6% used [76800000,76a26dc0,78aa0000)
  to   space 34048K, 0% used [746c0000,746c0000,76800000)
 PSOldGen        total 349568K, used 139096K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60fd6258,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
57030.592: [GC [PSYoungGen: 107419K->33204K(138432K)] 246516K->173516K(488000K), 2.3490715 secs]
 Heap after GC invocations=1456:
Heap
 PSYoungGen      total 138432K, used 33204K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 0% used [6e000000,6e000000,746c0000)
  from space 33216K, 99% used [746c0000,7672d248,76730000)
  to   space 36288K, 0% used [76730000,76730000,78aa0000)
 PSOldGen        total 349568K, used 140312K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 40% used [58800000,61106130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
}  {Heap before GC invocations=1457:
Heap
 PSYoungGen      total 138432K, used 138397K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 99% used [6e000000,746ba2a0,746c0000)
  from space 33216K, 99% used [746c0000,7672d248,76730000)
  to   space 36288K, 0% used [76730000,76730000,78aa0000)
 PSOldGen        total 349568K, used 140312K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 40% used [58800000,61106130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
57035.835: [GC [PSYoungGen: 138397K->16265K(131776K)] 278709K->179145K(481344K), 0.9527750 secs]
 Heap after GC invocations=1457:
Heap
 PSYoungGen      total 131776K, used 16265K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 0% used [6e000000,6e000000,73d40000)
  from space 36288K, 44% used [76730000,77712580,78aa0000)
  to   space 39616K, 0% used [73d40000,73d40000,763f0000)
 PSOldGen        total 349568K, used 162880K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,62710130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
} 2005. 12. 22 오전 10:11:52 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: unable to create new native thread) executing org.apache.jk.common.SocketAcceptor@b7299b, terminating thread
2005. 12. 22 오전 10:11:52 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:52 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
 {Heap before GC invocations=1458:
Heap
 PSYoungGen      total 131776K, used 111753K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 100% used [6e000000,73d40000,73d40000)
  from space 36288K, 44% used [76730000,77712580,78aa0000)
  to   space 39616K, 0% used [73d40000,73d40000,763f0000)
 PSOldGen        total 349568K, used 162880K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,62710130,6dd60000)
 PSPermGen       total 31744K, used 29578K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564e2810,56700000)
57041.924: [GC [PSYoungGen: 111753K->1897K(135104K)] 274633K->165667K(484672K), 0.0574536 secs]
 Heap after GC invocations=1458:
Heap
 PSYoungGen      total 135104K, used 1897K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 0% used [6e000000,6e000000,73d40000)
  from space 39616K, 4% used [73d40000,73f1a5c0,763f0000)
  to   space 38464K, 0% used [76510000,76510000,78aa0000)
 PSOldGen        total 349568K, used 163770K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,627eea38,6dd60000)
 PSPermGen       total 31744K, used 29578K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564e2810,56700000)
} 
제목 : Re: 오전에 발생한 현상은...
글쓴이: 이원영(javaservice) 2005/12/22 15:16:35 조회수:380 줄수:16
오전에 발생한 현상은 heap 메모리와는 무관하게 HP-UX의 커널파라메터인 max_thread_proc 값에
영향은 받은 것 같습니다. default가 64이기 때문에 하나의 process가 64개 이상의 thread를 
생성하지 못합니다.

보시는 방법은
kmtune | grep max_thread_proc
하시면 될 겁니다.

NOTE: 그러나, 맨 처음 올려주신 OutOfMemoryError는 heap 힙메모리와 관련되어 있는 것으로
추정되며, 오전 상황과는 다른 이슈로 보입니다. 해당 현상이 일어났을 때, 앞서처럼 verbosegc
결과를 올려주시면 가이드를 드리겠습니다.

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: 그렇다면 thread 수가 일반적인것인지요?
글쓴이: 손님(guest) 2005/12/22 15:48:14 조회수:343 줄수:12
그렇군요. heap 메모리에 대해서는 프로그램적인 누수가 있을수도 있지만, 아직 정확하게
파악할수 있지는 못해서 1차적으로 java option에서 메모리 옵션을 늘려서 지켜보고 있는
상황입니다.

말씀하신것처럼 thread의 수가 64개로 잡혀있네요.

max_thread_proc            64  -  64

그런데 제가 시스템 엔지니어가 아니다보니
이 수치가 준포탈급의 사이트를 운영하기에 적당한것인지에 대해서는 잘 모르겠네요.

항상 도움만 받아가네요. 감사합니다.
제목 : Re: HP-UX의 Thread 모델은..
글쓴이: 이원영(javaservice) 2005/12/22 15:55:02 조회수:633 줄수:31
HP-UX의 Thread 모델은 IBM AIX나 SUN Solaris에 비해 상대적으로 무겁습니다. 그래서 JVM하나에서
여러개의 Thread를 띄우는 것이 상대적으로 힘겹게 다가옵니다. 그래서인지, default로 설정된 
max_thread_proc 64개는 WAS(웹어플리케이션서버)와 같이 하나의 JVM에서 multi-thread로 구동되는
환경에서 늘 한번씩 겪는 것으로 상대적으로 작게 설정되어 있는 감이 늘 있습니다. 튜닝시 약방의
감초처럼 항상 올려주어야 합니다.

(Thread 모델의 특성 그렇다는 것이지, HP-UX가 WAS를 운영하기에 성능이 좋지 않다는 얘기가
 전혀 아닙니다. Thread를 키우는 것 보다 process를 multi로 클러스터링 하는 것이 HP-UX에서는 보다
 효과적이며, 개인적인 생각으로는 HP-UX가 WAS운영머신 및 성능적 관점에서 매우 유리한 위치를
 차지하고 있다고 생각합니다.)

Tomcat의 허용가능한 최대 thread 보다는 최소한 max_thread_proc 값이 크게 잡혀있어야 겠지요.

그러면 Tomcat의 최대 thread값은 얼마가 적당하냐란 질문이 나올 수 있는데, 이건 답이 없는
문제로서, 해당 사이트의 특성에 맞게 설정해야 합니다. (제니퍼와 같은 APM툴을 사용하시면
운영중에 몇개의 thread가 늘 쓰이는지를 모니터링 하실 수 있겠지요)

액티브서비스의 개수는 깔때기에 물을 일정하게 내려보낼 때, 그 물높이 해당 하는 특성이 있습니다.
단위시간당 흘러나올 수 있는 물의 량보다 단위시간당 흘러들어오는 물의 량이 근접하게 될 때,
물높이는 상대적으로 짧은 시간에 높아집니다.(정확히는 분수함수의 특성이 있습니다.)
무엇인가 backend에서 잠시 막히면 순식간에 차 올라오게 되지요. 따라서, 50개냐, 100개냐,
200개냐의 문제가 아닙니다. 50보 100보의 특성이 있는 것이지요.

-------
2005.12.23 첨언
아래 질문에 대해, "예, 적어도 그렇습니다."

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: 그렇다면...?
글쓴이: 손님(guest) 2005/12/22 18:36:40 조회수:297 줄수:9
일반적으로 tomcat의 server.xml에 

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

와 같이 설정이 되어 있는데요, 그렇다면 HP-UX의 max_thread_proc 값이 위의 maxThreads 값보다는 
즉, 150과 같거나 높게 설정이 되어야 하는건가요?


http://www.javaservice.net/ 펌...

'프로그래밍 > Library' 카테고리의 다른 글

[펌] eclipse short cuts  (0) 2007.11.28
[펌] eclipse 에서 run 실행시 jvm 에 대한 세팅은 어디서 하나요?  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] james mail server setting  (0) 2007.11.28
[펌] JUnit 설정  (0) 2007.11.28