달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

K사 프로젝트 중 다음과 같은 에러가 발생. 27일에는 단기적으로 발생하다가 28일에는 DB 커넥션에 거의 실패를 했음. 29일부터 31일까지 계속 커넥션이 되지 않음.

- 드라이버를 사용하여 커넥션을 연결한 경우.
java.sql.SQLException: IO 예외 상황: Broken pipe

- 톰켓의 데이터소스를 사용한 경우.
2006. 1. 31. 오전 10:39:26 org.apache.tomcat.util.threads.ThreadPool logFull
심각: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status
2006. 1. 31. 오전 10:39:36 org.apache.coyote.http11.Http11Protocol pause
정보: Pausing Coyote HTTP/1.1 on http-5010
2006. 1. 31. 오전 10:39:36 org.apache.jk.common.ChannelSocket acceptConnections
경고: Exception executing accept
java.net.SocketException: Invalid argument
 at java.net.PlainSocketImpl.socketSetOption(Native Method)
 at java.net.PlainSocketImpl.setOption(PlainSocketImpl.java:240)
 at java.net.Socket.setSoLinger(Socket.java:814)
 at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:300)
 at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:638)
 at org.apache.jk.common.SocketAcceptor.runIt(ChannelSocket.java:847)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:534)
2006. 1. 31. 오전 10:39:37 org.apache.catalina.core.StandardService stop
정보: Stopping service Catalina
2006. 1. 31. 오전 10:39:37 org.apache.catalina.core.StandardHostDeployer remove
정보: Removing web application at context path /admin
2006. 1. 31. 오전 10:39:37 org.apache.catalina.logger.LoggerBase stop
정보: unregistering logger Catalina:type=Logger,path=/admin,host=localhost
2006. 1. 31. 오전 10:39:38 org.apache.catalina.core.StandardHostDeployer remove
메모리와 java 프로세스가 10~15%로 증가하다가 1%로 떨어지는 현상발생

http://javaservice.co.kr/~java/bbs/search.cgi?m=resource&b=engine&p=0&c=search&k=java.net.SocketException&o=tb&sb=engine


단지 커넥션의 문제인 줄 알았던 이슈. 로그를 보니 threadPool  이라는 메세지를 찾았다. server.xml 의 maxThread 갯수는 150 개 였는데 pop3로 메일을 가져오는 프로세스를 타는 순간 스레드갯수가 늘어난다. 스레드 갯수가 부족하여 다른 request 도 처리하지 못하고. 메일을 가져오지도 못한 상태로 멈춰버리는 현상이 발생한 것.
250 으로 늘리니 정상적으로 동작했다. 하지만 cpu 점유율이 25% 까지 증가. 메모리 증가.
정상적으로 메일을 가져온 후로는 cpu점유와 메모리 점유가 정상적으로 떨어졌다.

이후로 커넥션의 문제도 사라졌다. 커넥션 풀을 사용하는 경우. 스레드의 갯수가 부족했던 것이 원인이었던 듯.
톰켓의 데이터소스와 개별적으로 만든 커넥션 풀. 두가지를 모두 사용하고 있었으니 스레드의 갯수가 부족하게 되면서 커넥션관리가 제대로 되지 않았던 듯하다.
Broken pipe 의 경우도 네트웍의 문제라기보다는 커넥션 풀의 문제였던것이다.

실제로 jdbc로 테스트를 해본 결과 문제없이 동작했다;

'java' 카테고리의 다른 글

서블렛 + JDBC 연동시 코딩 고려사항 -제1탄-  (0) 2006.02.21
리소스 누수현상  (0) 2006.02.21
Jakarta POI - 쓰기  (0) 2005.11.30
이미지포함된 워드 파일 다운로드 시  (0) 2005.11.30
Jakarta POI - 읽기  (0) 2005.11.30
Posted by 알 수 없는 사용자
|