10. 설정
S h a r e d
E x c u t e r
!
C o n n e c t o r
T h r e a d
11. Connector
설정
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3"
redirectPort="8443" />
Default Max Thread Value = 200
12. maxSpareThreads Idle 상태로 유지할 max thread pool size
설정
maxThreads 동시 요청에 의해 Connector가 생성 할 수 있는 최대 request 수
minSpareThreads tomcat을 실행할때 최소로 유지할 Idle Thread 수
maxIdleTime Thread를 유지하는 시간(ms)
minSpareThreads = 10, maxSpareThreads=5, maxThreads = 15
16. Thread Dump
차종은 무엇인가?
어디서부터 왔는가?
어디로 가고 있는가?
이동 경로는?
현재 상태는?
17. [Thread Dump Example]
"http-bio-8080-exec-5" #24 daemon prio=5 os_prio=31 tid=0x00007fc893d16800 nid=0x6307 runnable [0x0000000116ca4000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
- locked <0x00000007b66df4b8> (a java.net.SocksSocketImpl)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:149)
at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:405)
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:454)
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:693)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:251)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
- locked <0x00000007a0cbd3b0> (a org.apache.tomcat.dbcp.dbcp.BasicDataSource)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.apache.jsp.testds_jsp._jspService(testds_jsp.java:88)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
18. Thread Dump 남기는 방법 - 커맨드
!
1. 프로세스 ID를 확인 : pid
2. Thread Dump 발생시키기
1. Unix/Linux : kill -3 <pid>
2. JDK 1.5+ : JAVA_HOME/bin/jstack <pid>
3. 덤프 확인
1. Solaris/HP-UX/Linux/Windows : Catalina.out
2. AIX : javcore 파일
19. Thread Dump 남기는 방법 - jvisualVM
!
1. JAVA_OPTS에 JMX 설정 (local은 자동으로 확인)
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
2. jvisualVM 실행
1. JDK 1.6_18+ : JAVA_HOME/bin/visualvm
2. jvisualVM 개발 홈페이지에서 다운로드 : http://visualvm.java.net
3. Remote에 톰캣 IP 추가 후 다시 JMX 형태의 Connection 추가
4. Thread 탭에서 “Thread Dump” 버튼으로 덤프 발생