直到今天,在我的电脑本地进行一些测试时,我没有注意到,Tomcat在日志文件中发布了一个错误。我正在使用Tomcat 6.0.29和Java JDK 1.6。
Dec 1, 2010 12:36:57 pm org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
Dec 1, 2010 12:36:57 pm org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVER: The web application [/AutoSpyder] appears to have started a thread named
[AWT-Windows] but has failed to stop it. This is very likely to create a memory
leak.
什么?我以前从未见过这个。所以我昨天检查了我的日志文件,果然,这个错误也存在。我不太明白是什么导致了这一点。
我可以假设它必须是我的一个使用java.awt
包中对象的servlet吗?如果是这样,我如何查明引起此问题的代码?< / p>
2010-12-01 14:28:18 Full thread dump Java HotSpot(TM) Client VM (17.1-b03 mixed mode, sharing): "JMX server connection timeout 34" daemon prio=6 tid=0x03069400 nid=0x960 in Object.wait() [0x0461f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a [I) at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150) - locked (a [I) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "RMI Scheduler(0)" daemon prio=6 tid=0x03069000 nid=0xe88 waiting on condition [0x045cf000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) at java.util.concurrent.DelayQueue.take(DelayQueue.java:164) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "RMI TCP Connection(1)-192.168.0.102" daemon prio=6 tid=0x0308a400 nid=0xebc runnable [0x0457f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) - locked (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(FilterInputStream.java:66) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "RMI TCP Accept-0" daemon prio=6 tid=0x039e0c00 nid=0xc68 runnable [0x0452f000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) - locked (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "AWT-Windows" daemon prio=6 tid=0x02b65400 nid=0x7c4 runnable [0x042cf000] java.lang.Thread.State: RUNNABLE at sun.awt.windows.WToolkit.eventLoop(Native Method) at sun.awt.windows.WToolkit.run(WToolkit.java:293) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "Java2D Disposer" daemon prio=10 tid=0x02fccc00 nid=0x93c in Object.wait() [0x039df000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.java2d.Disposer.run(Disposer.java:127) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "http-8080-6" daemon prio=6 tid=0x03322800 nid=0xfec in Object.wait() [0x0395f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "http-8080-5" daemon prio=6 tid=0x02ba5c00 nid=0xdbc in Object.wait() [0x0390f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "http-8080-4" daemon prio=6 tid=0x02ff6400 nid=0xa1c in Object.wait() [0x038bf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "http-8080-3" daemon prio=6 tid=0x0317e400 nid=0x850 in Object.wait() [0x0386f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "http-8080-2" daemon prio=6 tid=0x03314800 nid=0xf9c in Object.wait() [0x0381f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "http-8080-1" daemon prio=6 tid=0x02efe800 nid=0x250 in Object.wait() [0x037cf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.net.JIoEndpoint$Worker) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) - locked (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:662) Locked ownable synchronizers: - None "TP-Monitor" daemon prio=6 tid=0x02eed800 nid=0xd64 in Object.wait() [0x0375f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable) at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565) - locked (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "TP-Processor4" daemon prio=6 tid=0x0318b000 nid=0x998 runnable [0x0370f000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) - locked (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:312) at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:666) at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:877) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "TP-Processor3" daemon prio=6 tid=0x0308f800 nid=0x92c in Object.wait() [0x036bf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) - locked (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "TP-Processor2" daemon prio=6 tid=0x03192400 nid=0xfac in Object.wait() [0x0366f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) - locked (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "TP-Processor1" daemon prio=6 tid=0x03182400 nid=0x8d8 in Object.wait() [0x0361f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Object.wait(Object.java:485) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662) - locked (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "http-8080-Acceptor-0" daemon prio=6 tid=0x03172400 nid=0xf04 runnable [0x035cf000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) - locked (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) 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:662) Locked ownable synchronizers: - None "ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=6 tid=0x03163400 nid=0xbe8 waiting on condition [0x0357f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "GC Daemon" daemon prio=2 tid=0x0307bc00 nid=0x110 in Object.wait() [0x0349f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a sun.misc.GC$LatencyLock) at sun.misc.GC$Daemon.run(GC.java:100) - locked (a sun.misc.GC$LatencyLock) Locked ownable synchronizers: - None "Low Memory Detector" daemon prio=6 tid=0x02aecc00 nid=0x5b4 runnable [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "CompilerThread0" daemon prio=10 tid=0x02ae7000 nid=0x798 waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Attach Listener" daemon prio=10 tid=0x02ae5800 nid=0xddc waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Signal Dispatcher" daemon prio=10 tid=0x02ae4000 nid=0xc00 runnable [0x00000000] java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Finalizer" daemon prio=8 tid=0x02add400 nid=0x378 in Object.wait() [0x02caf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) Locked ownable synchronizers: - None "Reference Handler" daemon prio=10 tid=0x02adbc00 nid=0x474 in Object.wait() [0x02c5f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked (a java.lang.ref.Reference$Lock) Locked ownable synchronizers: - None "main" prio=6 tid=0x002b7000 nid=0x14c runnable [0x0090f000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390) - locked (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:453) at java.net.ServerSocket.accept(ServerSocket.java:421) at org.apache.catalina.core.StandardServer.await(StandardServer.java:389) at org.apache.catalina.startup.Catalina.await(Catalina.java:662) at org.apache.catalina.startup.Catalina.start(Catalina.java:614) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Locked ownable synchronizers: - None "VM Thread" prio=10 tid=0x02ada400 nid=0x210 runnable "VM Periodic Task Thread" prio=10 tid=0x02aefc00 nid=0x79c waiting on condition JNI global references: 1529
答案 0 :(得分:3)
尝试进行线程转储以获取服务器上运行的所有线程的列表。由此,您可以根据堆栈跟踪确切地确定哪个类启动了线程
按ctrl + break
在命令行中输入:kill -3 <pid>
答案 1 :(得分:1)
与Windows(即MS Windows)和底层操作系统的本机调用有关。这些通常是GUI类型的窗口操作,但可能是其他特定于操作系统的东西,例如剪贴板或字体相关。
如果您的代码中没有任何明显的内容可能与触发它的原因有关,那么我就不用担心了 - 对于在Web应用程序中剥离新线程的一般情况,该警告更多如果不充分了解潜在的问题,你不应该明确做些什么。
答案 2 :(得分:1)
我们有tomcat服务器和jsf。 JSF客户端将从服务器请求图像并导致AWT-Windows线程开始。似乎因为线程contextClassLoader是WebappClassLoader而导致内存泄漏。
看起来调用Java2DResource会导致创建AWT-Windows线程 -
守护程序线程[http-8080-1](暂停(进入线程中的方法))
Thread。(Runnable,String)行:444&lt; - thread name是AWT-Windows
WToolkit。()行:244
NativeConstructorAccessorImpl.newInstance0(Constructor,Object [])行:不可用[native method]
NativeConstructorAccessorImpl.newInstance(Object [])line:39
DelegatingConstructorAccessorImpl.newInstance(Object [])line:27
Constructor.newInstance(Object ...)行:513
Class.newInstance0()行:355
Class.newInstance()行:308
工具包$ 2.run()行:846
AccessController.doPrivileged(PrivilegedAction)行:不可用[native method]
Toolkit.getDefaultToolkit()行:826
D3DGraphicsDevice。()行:47
SurfaceManagerFactory.createCachingManager(BufferedImage)行:48
SurfaceManager.getManager(Image)行:54
SurfaceData.getDestSurfaceData(Image)行:123
Win32GraphicsEnvironment(SunGraphicsEnvironment).createGraphics(BufferedImage)行:389
HeadlessGraphicsEnvironment.createGraphics(BufferedImage)行:76
BufferedImage.createGraphics()行:1137
TabStripeImage(Java2Dresource).getImage(ResourceContext)行:115
TabStripeImage(Java2Dresource).send(ResourceContext)行:89
ResourceLifecycle.sendResource(ResourceContext,InternetResource)行:219
ResourceLifecycle.send(ResourceContext,InternetResource)行:158
InternetResourceService.load(Object,Object)行:335
LRUMapCache.load(Object,Object)行:116
LRUMapCache.get(Object,Object)行:87
InternetResourceService.serviceResource(String,HttpServletRequest,HttpServletResponse)行:195
InternetResourceService.serviceResource(HttpServletRequest,HttpServletResponse)行:141
Filter(BaseFilter).doFilter(ServletRequest,ServletResponse,FilterChain)行:508
Ajax4jsfFilter.doFilter(ServletRequest,ServletResponse,FilterChain)行:56
SeamFilter $ FilterChainImpl.doFilter(ServletRequest,ServletResponse)行:69
LoggingFilter.doFilter(ServletRequest,ServletResponse,FilterChain)行:60
SeamFilter $ FilterChainImpl.doFilter(ServletRequest,ServletResponse)行:69
SeamFilter.doFilter(ServletRequest,ServletResponse,FilterChain)行:158
ApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse)行:235
ApplicationFilterChain.doFilter(ServletRequest,ServletResponse)行:206
StandardWrapperValve.invoke(请求,响应)行:233
StandardContextValve.invoke(Request,Response)行:191
StandardHostValve.invoke(请求,响应)行:127
ErrorReportValve.invoke(请求,响应)行:102
AccessLogValve.invoke(请求,响应)行:555
StandardEngineValve.invoke(请求,响应)行:109
CoyoteAdapter.service(Request,Response)行:298
Http11AprProcessor.process(long)行:861
Http11AprProtocol $ Http11ConnectionHandler.process(long)行:579
AprEndpoint $ Worker.run()行:1584
Thread.run()行:619 [局部变量不可用]
答案 3 :(得分:1)
看起来你正在运行JMX,我得到的印象是Tomcat JMX服务器可能正在实际设置定时器线程。除了你在JavaRanch上的并行帖子中提到的那些,你在这里的转储中有一个java2D线程。
我不能告诉100%,因为我不知道哪些线程是孤儿线程的父母。如果你能确定,那会有所帮助。
然而,你的仿射变换肯定会拉动图形。这是一个图形功能,将尝试将您的视频卡用作硬件加速器。如果您没有指定无头操作,它将进入您的窗口系统进行操作。
答案 4 :(得分:1)
受this thread的启发,我找到了以下解决方案:
您只需要将AWT-Window-Thread附加到System-Classloader而不是Wabapp-Classloader。您可以在ServletContextListener中执行此操作:
public void contextInitialized(ServletContextEvent evt) {
Thread thread = Thread.currentThread();
ClassLoader ccl = thread.getContextClassLoader(); // PUSH
try {
thread.setContextClassLoader(ClassLoader.getSystemClassLoader());
Toolkit.getDefaultToolkit().createImage(new byte[]{});
} finally {
thread.setContextClassLoader(ccl); // POP
}
}
答案 5 :(得分:0)
你是否正在运行包括某些图形库,如Jasper,JFreechart,LiquidOffice,StyleReport,......可能与AWT交互?
尝试通过提供-Djava.awt.headless = true属性来启动tomcat,以查看是否删除了异常