2013-05-22 4 views
0

웹 서버에 http 요청을 계속 보내면 응답이 멈추고 'xxx 대기 중'이라는 흰색 화면에 멈추었습니다. 그것은 반응이 없습니다.Hibernate & Tomcat - 소켓을 닫지 않음

또한 stacktrace에 예외가 표시되지 않습니다. catalina.out에는 예외가 없습니다.

나는 소켓 연결을 닫지 않는 바람둥이와 관련이 있다고 생각합니다. |

$ cd /proc/{processID}/fd 
$ ls -l | wc -l 

반환 값 1000 이상은 거의 매번 내가 'LS -l의 반환 값을 새로 쳤을 때 에만 발생 wc -l '올라간다! 내가이 명령을 실행하면

는 그리고

$ ll 

은 내가 내 웹 응용 프로그램을 반환하지 않는 (또는 폐쇄하지 않음)에 대해 아니에요 확신

lrwx------ 1 root root 64 5월 22 17:49 989 -> socket:[1018368] 
lr-x------ 1 root root 64 5월 22 17:41 99 -> socket:[1017430] 
lrwx------ 1 root root 64 5월 22 17:49 990 -> socket:[1018369] 
lrwx------ 1 root root 64 5월 22 17:49 991 -> socket:[1018370] 
lrwx------ 1 root root 64 5월 22 17:49 992 -> socket:[1018371] 
lrwx------ 1 root root 64 5월 22 17:49 993 -> socket:[1018384] 
lrwx------ 1 root root 64 5월 22 17:49 994 -> socket:[1018373] 
lrwx------ 1 root root 64 5월 22 17:49 995 -> socket:[1018374] 
lrwx------ 1 root root 64 5월 22 17:49 996 -> socket:[1018375] 
lrwx------ 1 root root 64 5월 22 17:49 997 -> socket:[1018377] 
lrwx------ 1 root root 64 5월 22 17:49 998 -> socket:[1018378] 
lrwx------ 1 root root 64 5월 22 17:49 999 -> socket:[1018379] 

같은 기록을 많이 볼의를 데이터베이스에 대한 연결.

내가 MySQL을 사용하고있어 내가 my.cfg에게

[mysqld] 
wait-timeout=3 
interactive-timeout=60 

를 구성한 나는 이것은 DNS하지 mysql을 또한 내가

를 발행하는 경우

mysql> select @@session.wait_timeout, @@global.wait_timeout; 
+------------------------+-----------------------+ 
| @@session.wait_timeout | @@global.wait_timeout | 
+------------------------+-----------------------+ 
|      30 |      3 | 
+------------------------+-----------------------+ 
1 row in set (0.00 sec) 

에서 확인할 수 있습니다 발행물. 웹 서버에서 웹 사이트를 열 수 있습니다. 내가

java 21395 root 390u IPv6   1380717  0t0  TCP cooingbee.co.kr:40026->cooingbee.co.kr:mysql (CLOSE_WAIT) 
java 21395 root 391u IPv6   1380718  0t0  TCP cooingbee.co.kr:40025->cooingbee.co.kr:mysql (CLOSE_WAIT) 
java 21395 root 392u IPv6   1380721  0t0  TCP cooingbee.co.kr:40028->cooingbee.co.kr:mysql (CLOSE_WAIT) 

처럼 MySQL로 Tomcat의 연결을 볼 수 나는 또한

을 ulimit를 설정 한 경우

netstat -tulpn 
tcp  0  0 ::ffff:127.0.0.1:8005  :::*      LISTEN  21395/java 
tcp  0  0 :::8009      :::*      LISTEN  21395/java 
tcp  0  0 :::80      :::*      LISTEN  21395/java 

또한

lsof -p 21395 

java 21395 root 359u sock    0,5  0t0 1379694 can't identify protocol 
java 21395 root 360u sock    0,5  0t0 1379696 can't identify protocol 
java 21395 root 361u sock    0,5  0t0 1379697 can't identify protocol 
java 21395 root 362u sock    0,5  0t0 1379700 can't identify protocol 
java 21395 root 363u sock    0,5  0t0 1379702 can't identify protocol 
java 21395 root 364u sock    0,5  0t0 1379703 can't identify protocol 
java 21395 root 365u sock    0,5  0t0 1379961 can't identify protocol 

을 많이 보여

내 sysctl.conf 파일에서이 파일을 추가했지만 아직 운이 없습니다.

kernel.shmmni = 4096 
kernel.sem = 256 32000 100 128 
fs.aio-max-nr = 1048576 
fs.file-max = 6815744 
net.core.rmem_default = 262144 
net.core.rmem_max = 4194304 
net.core.wmem_default = 262144 
net.core.wmem_max = 1048586 
내가 연결이

show processlist 

질문

무엇들을 사용하여 누출되지 않는 DBMS 측에서 확인했습니다

CentOS 5.x 
Java 7 
Tomcat6/7 (I've tested my webapp on both tomcat 6 and 7) 
MySQL 5.5 
web application uses Hibernate, c3p0, Spring DI, MVC 

내 서버 환경에

추가 정보 '양말이 프로토콜을 식별 할 수 없습니까?'

/proc/{processID}/fd에 1000 개가 넘는 기록이있는 경우 내 바람둥이가 응답하지 않습니다.

원활하게 작동하려면 어떻게해야합니까?

수정 1 코드를 보여 드리겠습니다. 참고로, 나는 이런 식으로 Hibernate와 Spring을 사용하도록 설계하거나 의도하지 않았다. 나는 왜 내가 지금이 말을하는지 보게 될 것 같아.).

부분은

public class ItemDAOImpl extends HibernateDaoSupport implements ItemDAO { 

public ItemDetail itemDetail(Integer itemSeq) { 
     ItemDetail itemDetail = null; 

     try { 
      itemDetail = (ItemDetail) this.getHibernateTemplate().get("kr.co.sgis.services.web.mobile.item.form.ItemDetail", itemSeq); 
      System.out.println("Item Detail~ :: " + itemDetail.getId()); 
      return itemDetail; 
     } catch (Exception ex) { 
      System.err.println(ex.getMessage() + "\nThe Stack Trace is:"); 
      ex.printStackTrace(); 
      return itemDetail; 
     } 

    } 
public Item itemView(Integer itemSeq, Integer mo_id) { 
     Item itemView = null; 
     Session session = null; 
     try { 
      session = getSession(); 
      Criteria item = session.createCriteria(Item.class) 
       .add(Restrictions.eq("id", itemSeq)) 
       .add(Restrictions.eq("mobile_id", mo_id)); 
      itemView = (Item) item.uniqueResult(); 

      //itemView = (ItemHead) this.getHibernateTemplate().get("kr.co.sgis.services.web.mobile.item.form.Item", itemSeq); 
      System.out.println("Item View~ :: " + itemView.getId()); 
      session.flush(); 
      return itemView; 
     } catch (Exception ex) { 
      System.err.println(ex.getMessage() + "\nThe Stack Trace is:"); 
      ex.printStackTrace(); 
      return itemView; 
     }finally{ 
      HibernateUtil.tryCloseAll(session, null); 
     } 

    } 
... 
} 

지금까지,

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <!-- 
     <property name="dataSource"><ref bean="dataSource"/></property> 
     --> 
     <property name="configLocation"> 
      <value>classpath:hibernate.cfg.xml</value> 
     </property> 

마지막으로 내 hibernate.cfg.xml로 일부 자바 코드를 내 봄-servlet.xml 파일의

<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="connection.url">jdbc:mysql://***.***.***.***:3306/****</property> 
<property name="connection.username">****</property> 
<property name="connection.password">****</property> 
<property name="hibernate.c3p0.acquire_increment">5</property> 
<property name="hibernate.c3p0.idle_test_period">100</property> 
<property name="hibernate.c3p0.max_size">10000</property> 
<property name="hibernate.c3p0.max_statements">0</property> 
<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.testConnectionOnCheckout">true</property> 
<property name="hibernate.c3p0.unreturnedConnectionTimeout">70</property> 
<property name="hibernate.c3p0.timeout">1</property> 
<property name="current_session_context_class">thread</property> 
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

부분을 PF 내가 인터넷에서 검색 한 것처럼, getHibernateTemplate()와 HibernateDAOSupport는 n이다. ot 권장. 또한 getHibernateTemplate()을 사용하면 수동으로 명시 적으로 세션을 닫을 필요가 없지만 'HibernateUtil.tryCloseAll()'을 추가 했으므로 불만을 느꼈습니다.

여기

public static void tryCloseAll(Session s, Transaction t){ 

     try{ 

      if(t!=null){ 
       if(t.isActive()){ 
        //? 
        t.commit(); 
       } 

      } 

      if(s!=null){ 
       if(s.isOpen()){ 
        try{ 
         s.flush(); 
        }catch(Exception e){ 
         System.out.println("Tried to close session and failed"); 
        } 
       } 
      } 


     }catch(Exception e){ 

     } 
    } 

편집 2
다음은 -QUIT PID 당신은 훌륭한 많은 정보를 게시

2013-05-23 17:26:10 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.21-b01 mixed mode): 

"http-80-6" daemon prio=10 tid=0x0000000002ad3800 nid=0x357f in Object.wait() [0x00002b75db57d000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab5c158> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab5c158> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-5" daemon prio=10 tid=0x0000000002505800 nid=0x3577 in Object.wait() [0x00002b75db47c000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab1a4a0> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab1a4a0> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-4" daemon prio=10 tid=0x0000000002f6a800 nid=0x3576 in Object.wait() [0x00002b75db37b000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab60f68> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab60f68> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-3" daemon prio=10 tid=0x00000000036fd800 nid=0x3575 in Object.wait() [0x00002b75db27a000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab61d68> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab61d68> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-2" daemon prio=10 tid=0x0000000002ac2000 nid=0x3574 in Object.wait() [0x00002b75db179000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab1f2f0> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab1f2f0> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-1" daemon prio=10 tid=0x00000000028eb800 nid=0x3571 in Object.wait() [0x00002b75dae6e000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab62188> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00000000fab62188> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:722) 

"TP-Monitor" daemon prio=10 tid=0x000000000260d800 nid=0x356f in Object.wait() [0x00002b75dad6d000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab19420> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable) 
    at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565) 
    - locked <0x00000000fab19420> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable) 
    at java.lang.Thread.run(Thread.java:722) 

"TP-Processor4" daemon prio=10 tid=0x0000000002add000 nid=0x356e runnable [0x00002b75dac6c000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.PlainSocketImpl.socketAccept(Native Method) 
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 
    at java.net.ServerSocket.implAccept(ServerSocket.java:522) 
    at java.net.ServerSocket.accept(ServerSocket.java:490) 
    at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:311) 
    at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:668) 
    at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:879) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 
    at java.lang.Thread.run(Thread.java:722) 

"TP-Processor3" daemon prio=10 tid=0x0000000002adb800 nid=0x356d in Object.wait() [0x00002b75dab6b000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab18d30> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) 
    - locked <0x00000000fab18d30> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Thread.run(Thread.java:722) 

"TP-Processor2" daemon prio=10 tid=0x00000000025d9000 nid=0x356c in Object.wait() [0x00002b75daa6a000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab18f80> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) 
    - locked <0x00000000fab18f80> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Thread.run(Thread.java:722) 

"TP-Processor1" daemon prio=10 tid=0x00000000025d8800 nid=0x356b in Object.wait() [0x00002b75da969000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000fab191d0> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Object.wait(Object.java:503) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) 
    - locked <0x00000000fab191d0> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) 
    at java.lang.Thread.run(Thread.java:722) 

"http-80-Acceptor-0" daemon prio=10 tid=0x00002b75dc769000 nid=0x356a runnable [0x00002b75da622000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.PlainSocketImpl.socketAccept(Native Method) 
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 
    at java.net.ServerSocket.implAccept(ServerSocket.java:522) 
    at java.net.ServerSocket.accept(ServerSocket.java:490) 
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61) 
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352) 
    at java.lang.Thread.run(Thread.java:722) 

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=10 tid=0x000000000424d000 nid=0x3569 waiting on condition [0x00002b75da521000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
    at java.lang.Thread.sleep(Native Method) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1631) 
    at java.lang.Thread.run(Thread.java:722) 

"Timer-1" daemon prio=10 tid=0x000000000267b000 nid=0x3564 in Object.wait() [0x00002b75da82c000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000c3046fb8> (a java.util.TaskQueue) 
    at java.util.TimerThread.mainLoop(Timer.java:552) 
    - locked <0x00000000c3046fb8> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Timer.java:505) 

"Timer-0" prio=10 tid=0x00000000026c0800 nid=0x3563 in Object.wait() [0x00002b75da72b000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000c30906a0> (a java.util.TaskQueue) 
    at java.util.TimerThread.mainLoop(Timer.java:552) 
    - locked <0x00000000c30906a0> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Timer.java:505) 

"GC Daemon" daemon prio=10 tid=0x00002b75dc44d800 nid=0x3562 in Object.wait() [0x00002b75d9d98000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000c29e3d38> (a sun.misc.GC$LatencyLock) 
    at sun.misc.GC$Daemon.run(GC.java:117) 
    - locked <0x00000000c29e3d38> (a sun.misc.GC$LatencyLock) 

"Service Thread" daemon prio=10 tid=0x0000000002382000 nid=0x3560 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread1" daemon prio=10 tid=0x0000000002377000 nid=0x355f waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"C2 CompilerThread0" daemon prio=10 tid=0x0000000002374000 nid=0x355e waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Signal Dispatcher" daemon prio=10 tid=0x0000000002371800 nid=0x355d waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

"Finalizer" daemon prio=10 tid=0x0000000002324800 nid=0x355c in Object.wait() [0x00002b75d5832000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000c287dbd8> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) 
    - locked <0x00000000c287dbd8> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) 
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189) 

"Reference Handler" daemon prio=10 tid=0x000000000231d000 nid=0x355b in Object.wait() [0x00002b75d5731000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00000000c287d7f8> (a java.lang.ref.Reference$Lock) 
    at java.lang.Object.wait(Object.java:503) 
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) 
    - locked <0x00000000c287d7f8> (a java.lang.ref.Reference$Lock) 

"main" prio=10 tid=0x0000000002284000 nid=0x3551 runnable [0x00002b75cc81a000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.PlainSocketImpl.socketAccept(Native Method) 
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 
    at java.net.ServerSocket.implAccept(ServerSocket.java:522) 
    at java.net.ServerSocket.accept(ServerSocket.java:490) 
    at org.apache.catalina.core.StandardServer.await(StandardServer.java:431) 
    at org.apache.catalina.startup.Catalina.await(Catalina.java:676) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:628) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

"VM Thread" prio=10 tid=0x0000000002315800 nid=0x355a runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000002291800 nid=0x3552 runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000002293800 nid=0x3553 runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000002295000 nid=0x3554 runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000002297000 nid=0x3555 runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000002299000 nid=0x3556 runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0x000000000229a800 nid=0x3557 runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0x000000000229c800 nid=0x3558 runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0x000000000229e800 nid=0x3559 runnable 

"VM Periodic Task Thread" prio=10 tid=0x000000000238c800 nid=0x3561 waiting on condition 

JNI global references: 232 

Heap 
PSYoungGen  total 197248K, used 65894K [0x00000000eb760000, 0x00000000fbb30000, 0x0000000100000000) 
    eden space 180608K, 27% used [0x00000000eb760000,0x00000000ee781540,0x00000000f67c0000) 
    from space 16640K, 99% used [0x00000000faaf0000,0x00000000fbb28510,0x00000000fbb30000) 
    to space 26368K, 0% used [0x00000000f87b0000,0x00000000f87b0000,0x00000000fa170000) 
ParOldGen  total 76864K, used 45414K [0x00000000c2600000, 0x00000000c7110000, 0x00000000eb760000) 
    object space 76864K, 59% used [0x00000000c2600000,0x00000000c5259a10,0x00000000c7110000) 
PSPermGen  total 67200K, used 44249K [0x00000000bd400000, 0x00000000c15a0000, 0x00000000c2600000) 
    object space 67200K, 65% used [0x00000000bd400000,0x00000000bff36788,0x00000000c15a0000) 
+0

jstack 또는 구식 ctrl- \를 사용하여 클라이언트 처리 스레드가 중단 된 것처럼 보이는 경우 /의 덤프를 가져 왔습니까? –

+0

실례지만, 나는 jstack에 대해 들어 본 적이 없으며 'ctrl-'에 대한 지식도 없다. Jstack이 고장난 것 같습니다. 조금이라도 좀 기쁘게 할 수 있겠습니까? – Ascendant

+0

참조. http://helpx.adobe.com/cq/kb/TakeThreadDump.html http://stackoverflow.com/questions/2062493/jvm-thread-dump-location 참고 ctrl- \를 누르면 (UNIX 또는 MacOS, ctrl-break in Windows)는 프로세스에서 kill -QUIT를 실행하는 것과 같습니다. VisualVM을 사용하여 스레드 덤프를 얻을 수도 있습니다. –

답변

0

을 죽일의 출력,하지만 코드입니다.

지금은 그렇게 할 수 있습니다.

연결 풀을 사용하고 있습니까? Tomcat에서 JNDI 데이터 소스를 설정 했습니까? 아니면 최대 절전 모드를 사용하여 코드에서 연결을 얻고 있습니까? 두 경우 모두, 작업을 마친 후 연결을 제대로 종료하고 있습니까? 작업 단위가 커밋되거나 롤백 된 후에 finally 블록에서 완료되어야합니다.

최대 절전 모드가 문제의 원인입니다. 너를 사는게 뭐야?

스프링 JDBC 구현으로 인터페이스 기반 DAO를 사용하는 것이 더 나을 것이라고 생각합니다.

Oracle/Sun JVM을 사용하는 경우 Visual VM을 Tomcat PID에 첨부하여 진행 상황을 알려줄 수도 있습니다. 메모리 세대, 스레드, CPU, 객체 생성 등을 모두 실시간으로 보여줍니다.

+0

thx, 편집 1 plz – Ascendant

+0

Thx를 참조하십시오. 최후의 수단으로 의견을 말 하겠지만, 앱이 전체 앱을 통해 데이터베이스에 액세스하는 방식을 변경할 수 있다고는 생각하지 않습니다. '너를 사는거야?' 하이버 네이트를 사용하는 이유는 무엇입니까? O-R 매핑을 사용합니다. – Ascendant

+0

예, 그렇습니다. 그들은 모두 O/R이 효과가 없을 때까지 큰 절약이 될 것이라고 생각합니다. – duffymo

0

좋아, 내가 어떻게 든이 일을하고 있다고 생각해. 내가 할 수있는만큼 노력하겠습니다.
우선, 열린 세션의 수를 변경 한 것으로 보이는 것은 Hibernate 구성에서 Annotation에서 XML로 이동하는 것입니다.
또한 스프링 XML로 선언 된 데이터 소스가 hibernate.cfg.xml의 다른 구성을 오버라이드한다고 생각합니다. 스프링 서블릿 xml의 데이터 소스에 연결 풀링 구성을 추가했습니다.
같은 종류의 문제가있는 경우이 방법을 사용하면 도움이 될 수 있습니다.

관련 문제