Hi All, I've been having a problem for several days now when debugging Tomcat 5.5.26 on my development machine. Only when debugging, Tomcat runs very slow with high CPU usage. The same does not happen when running Tomcat without debugging. There is no noticeable difference in memory usage between debugging and not debugging. I'm working with other developers who have similar (if not identical) setups, and they haven't experienced these issues. I am relatively new to Java development, Tomcat, and Eclipse, so please let me know of any more helpful information I can provide.
When not in debug mode: - CPU spike at Tomcat startup, which goes all the way back down after a few seconds. - Each call in a series of JUnit tests which hit my local instance of Tomcat takes below 0.15 seconds, most of the time taking below 0.1 seconds. Pages in the browser load very quickly. - When I run these tests, there is only a brief (and not as severe) increase in the CPU usage of the java process, then it immediately goes back down. When in debug mode, starting Tomcat through Eclipse: - CPU spikes at startup and stays high for several minutes. During this time any attempt to stop Tomcat throws a "Connection refused" error. - The same unit tests that took fractions of a second to run now take around 30 seconds apiece. During this time CPU again seems to go through the roof. - When I pause the debugger and look at the stack trace (startup and while hitting code), I see lots of threads with Object.wait. Stack trace while running a test: org.apache.catalina.startup.Bootstrap at localhost:50076 (Suspended) Daemon System Thread [Finalizer] (Suspended) Object.wait(long) line: not available [native method] ReferenceQueue<T>.remove(long) line: 116 ReferenceQueue<T>.remove() line: 132 Finalizer$FinalizerThread.run() line: 159 Daemon System Thread [Reference Handler] (Suspended) Object.wait(long) line: not available [native method] Reference$Lock(Object).wait() line: 474 Reference$ReferenceHandler.run() line: 116 Thread [main] (Suspended) PlainSocketImpl.socketAccept(SocketImpl) line: not available [native method] SocksSocketImpl(PlainSocketImpl).accept(SocketImpl) line: 384 ServerSocket.implAccept(Socket) line: 450 ServerSocket.accept() line: 421 StandardServer.await() line: 379 Catalina.await() line: 616 Catalina.start() line: 576 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 585 Bootstrap.start() line: 295 Bootstrap.main(String[]) line: 433 Daemon System Thread [Signal Dispatcher] (Suspended) Daemon Thread [Thread-1] (Suspended) Thread.sleep(long) line: not available [native method] XMLWatchdog(FileWatchdog).run() line: 104 Daemon Thread [Timer-0] (Suspended) Object.wait(long) line: not available [native method] TaskQueue(Object).wait() line: 474 TimerThread.mainLoop() line: 483 TimerThread.run() line: 462 Daemon Thread [MySQL Statement Cancellation Timer] (Suspended) Object.wait(long) line: not available [native method] TaskQueue(Object).wait() line: 474 TimerThread.mainLoop() line: 483 TimerThread.run() line: 462 Daemon Thread [Thread-4] (Suspended) Thread.sleep(long) line: not available [native method] SockIOPool$MaintThread.run() line: 1316 Daemon Thread [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (Suspended) Thread.sleep(long) line: not available [native method] ContainerBase$ContainerBackgroundProcessor.run() line: 1548 Thread.run() line: 613 Daemon Thread [http-8080-Processor1] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor2] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor3] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor4] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor5] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor6] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor7] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor9] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor8] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor10] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor11] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor12] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor13] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor14] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor15] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor16] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor17] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor18] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor19] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor20] (Suspended) LinkedHashMap$EntryIterator.next() line: 383 IdentityMap.entryList() line: 194 IdentityMap.entries(Map) line: 71 DefaultFlushEventListener(AbstractFlushingEventListener).flushCollections(EventSource) line: 226 DefaultFlushEventListener(AbstractFlushingEventListener).flushEverythingToExecutions(FlushEvent) line: 77 DefaultFlushEventListener.onFlush(FlushEvent) line: 26 SessionImpl.flush() line: 1004 SessionImpl.managedFlush() line: 342 JDBCTransaction.commit() line: 136 HibernateTransactionManager.doCommit(DefaultTransactionStatus) line: 655 HibernateTransactionManager(AbstractPlatformTransactionManager).processCommit(DefaultTransactionStatus) line: 709 HibernateTransactionManager(AbstractPlatformTransactionManager).commit(TransactionStatus) line: 678 TransactionInterceptor(TransactionAspectSupport).commitTransactionAfterReturning(TransactionAspectSupport$TransactionInfo) line: 321 TransactionInterceptor.invoke(MethodInvocation) line: 116 Cglib2AopProxy$CglibMethodInvocation(ReflectiveMethodInvocation).proceed() line: 171 Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Object, Method, Object[], MethodProxy) line: 635 InterestGroupManager$$EnhancerByCGLIB$$157e5129.fetchInterest(Long) line: not available InterestService.fetchInterest(Long, List<String>) line: 531 InterestService.fetchSuggestedInterests(Long, int, Locale, List<String>) line: 583 UserController.addtopics(HttpServletRequest, HttpServletResponse) line: 197 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 585 UserController(MultiActionController).invokeNamedMethod(String, HttpServletRequest, HttpServletResponse) line: 473 UserController(MultiActionController).handleRequestInternal(HttpServletRequest, HttpServletResponse) line: 410 UserController(RestfulApiController).handleRequestInternal(HttpServletRequest, HttpServletResponse) line: 175 UserController(AbstractController).handleRequest(HttpServletRequest, HttpServletResponse) line: 153 SimpleControllerHandlerAdapter.handle(HttpServletRequest, HttpServletResponse, Object) line: 48 DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse) line: 875 DispatcherServlet.doService(HttpServletRequest, HttpServletResponse) line: 809 DispatcherServlet(FrameworkServlet).processRequest(HttpServletRequest, HttpServletResponse) line: 571 DispatcherServlet(FrameworkServlet).doGet(HttpServletRequest, HttpServletResponse) line: 501 DispatcherServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 690 DispatcherServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 803 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 269 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 188 ParameterizedPathFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 57 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 215 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 188 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 359 FilterSecurityInterceptor.invoke(FilterInvocation) line: 109 FilterSecurityInterceptor.doFilter(ServletRequest, ServletResponse, FilterChain) line: 83 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 SessionFixationProtectionFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 52 SessionFixationProtectionFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 ExceptionTranslationFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 101 ExceptionTranslationFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 AnonymousProcessingFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 105 AnonymousProcessingFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 SecurityContextHolderAwareRequestFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 91 SecurityContextHolderAwareRequestFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 AuthenticationProcessingFilter(BasicProcessingFilter).doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 173 AuthenticationProcessingFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 61 AuthenticationProcessingFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 HttpSessionContextIntegrationFilter.doFilterHttp(HttpServletRequest, HttpServletResponse, FilterChain) line: 235 HttpSessionContextIntegrationFilter(SpringSecurityFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 53 FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 371 FilterChainProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 174 DelegatingFilterProxy.invokeDelegate(Filter, ServletRequest, ServletResponse, FilterChain) line: 236 DelegatingFilterProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 167 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 215 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 188 CharEncodingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 17 DelegatingFilterProxy.invokeDelegate(Filter, ServletRequest, ServletResponse, FilterChain) line: 236 DelegatingFilterProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 167 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 215 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 188 DisableUrlSessionFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 44 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 215 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 188 StandardWrapperValve.invoke(Request, Response) line: 213 StandardContextValve.invoke(Request, Response) line: 174 StandardHostValve.invoke(Request, Response) line: 127 ErrorReportValve.invoke(Request, Response) line: 117 StandardEngineValve.invoke(Request, Response) line: 108 CoyoteAdapter.service(Request, Response) line: 174 Http11Processor.process(InputStream, OutputStream) line: 874 Http11Protocol$JmxHttp11ConnectionHandler(Http11BaseProtocol$Http11ConnectionHandler).processConnection(TcpConnection, Object[]) line: 665 PoolTcpEndpoint.processSocket(Socket, TcpConnection, Object[]) line: 528 LeaderFollowerWorkerThread.runIt(Object[]) line: 81 ThreadPool$ControlRunnable.run() line: 689 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor21] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor22] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor23] (Suspended) PlainSocketImpl.socketAccept(SocketImpl) line: not available [native method] SocksSocketImpl(PlainSocketImpl).accept(SocketImpl) line: 384 ServerSocket.implAccept(Socket) line: 450 ServerSocket.accept() line: 421 DefaultServerSocketFactory.acceptSocket(ServerSocket) line: 61 PoolTcpEndpoint.acceptSocket() line: 408 LeaderFollowerWorkerThread.runIt(Object[]) line: 71 ThreadPool$ControlRunnable.run() line: 689 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor24] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [http-8080-Processor25] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Thread [http-8080-Monitor] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$MonitorRunnable.run() line: 564 Thread.run() line: 613 Daemon Thread [TP-Processor1] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [TP-Processor2] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [TP-Processor3] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$ControlRunnable(Object).wait() line: 474 ThreadPool$ControlRunnable.run() line: 661 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [TP-Processor4] (Suspended) PlainSocketImpl.socketAccept(SocketImpl) line: not available [native method] SocksSocketImpl(PlainSocketImpl).accept(SocketImpl) line: 384 ServerSocket.implAccept(Socket) line: 450 ServerSocket.accept() line: 421 ChannelSocket.accept(MsgContext) line: 312 ChannelSocket.acceptConnections() line: 666 ChannelSocket$SocketAcceptor.runIt(Object[]) line: 876 ThreadPool$ControlRunnable.run() line: 689 ThreadWithAttributes(Thread).run() line: 613 Daemon Thread [TP-Monitor] (Suspended) Object.wait(long) line: not available [native method] ThreadPool$MonitorRunnable.run() line: 564 Thread.run() line: 613 At first I thought it was a problem with starting Tomcat through Eclipse using Sysdeo's plugin, but if I check the box for "Don't run Tomcat in debug mode," everything runs fine again. When configuring Tomcat to support remote debugging and running from the command line, as described here: http://wiki.apache.org/tomcat/FAQ/Developing, it runs fine but chokes again when I attach the Eclipse debugger to the VM that Tomcat is running under. Logs appear to reveal nothing out of the ordinary. Other info: JDK 1.5.0 on a Mac Eclipse 3.4.0 Tomcat 5.5.26 Any help or at least a point in the right direction for diagnosing this problem would be greatly appreciated. Kelly