Ошибка веб-приложения Tomcat - приложение запустило поток [AWT-Windows], но не смогло его остановить - утечка памяти? - PullRequest
2 голосов
/ 01 декабря 2010

До сегодняшнего дня во время локального тестирования на моем компьютере я не заметил, что 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? Если это так, как я могу точно определить код, вызывающий это?



Отредактировано, чтобы добавить дамп темы

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

Ответы [ 6 ]

3 голосов
/ 01 декабря 2010

Попробуйте получить дамп потока, чтобы получить список всех потоков, запущенных на вашем сервере. Исходя из этого, вы можете точно определить, какой класс запустил поток на основе трассировки стека

Windows

в окне консоли нажмите ctrl + break

Unix

в командной строке введите: kill -3 <pid>

1 голос
/ 31 января 2014

Вдохновленный этой темой Я нашел следующее решение:

Вам нужно только присоединить 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
    }
}
1 голос
/ 23 мая 2012

Похоже, что вы работаете с JMX, и у меня создается впечатление, что сервер Tomcat JMX может быть тем, что фактически настраивает поток таймера. В дополнение к тем, которые вы упомянули в своем параллельном посте на JavaRanch, в дампе у вас есть поток java2D.

Я не могу сказать 100%, потому что я не знаю, какие нити были родителями для бесхозных нитей. Если бы вы могли это определить, это помогло бы.

Однако, ваша аффинная трансформация явно затягивает графику. Это графическая функция, которая попытается использовать вашу видеокарту в качестве аппаратного ускорителя. Если вы не укажете работу без монитора, он подключится к вашей системе управления окнами.

1 голос
/ 09 декабря 2010

У нас есть сервер Tomcat и JSF.JSF-клиент будет запрашивать изображения с сервера и запускать поток AWT-Windows.Создается утечка памяти, поскольку потоки contextClassLoader является WebappClassLoader.

Похоже, что вызов Java2DResource может привести к созданию потока AWT-Windows -

Поток демона [http-8080-1] (Приостановлено)(запись в метод в Thread))
Thread. (Runnable, String) строка: 444 <- имя потока - AWT-Windows WToolkit. () строка: 244 NativeConstructorAccessorImpl.newInstance0 (Constructor, Object []) строка: недоступно [собственный метод] <br>NativeConstructorAccessorImpl.newInstance (Object []) строка: 39
DelegatingConstructorAccessorImpl.newInstance (Object []) строка: 27
Constructor.newInstance (Object ...) строка: 513 Класс.Строка newInstance0 (): 355
Строка Class.newInstance (): 308
Набор инструментов $ 2.run () Строка: 846
AccessController.doPrivileged (PrivilegedAction) Строка: недоступно [собственный метод]
Инструментарий.getDefaultToolkit () строка: 826
D3DGraphicsDevice. () строка: 47
SurfaceManagerFactory.createCachingManager (BufferedImage) строка: 48
SurfaceManager.getManager (Изображение) строка: 54
SurfaceData.getDestSurfaceData (Изображение) строка: 123 Win32GraphicsEnvironment (SunGraphicsEnvironment) .createGraphics (BufferedImage) строка: 389
HeadlessGraphicsEnvironment.createGraphics (BufferedImage8) 768 (BufferedImage).Строка createGraphics (): 1137
Строка TabStripeImage (Java2Dresource) .getImage (ResourceContext): 115
Строка TabStripeImage (Java2Dresource) .send (ResourceContext): 89
ResourceLifecycle.sendResource (строка ResourceContext: InternetRes): строка 21 ResourceContext: InternetResСтрока 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, HttpServletRestponse): 141 * 10FF (0).Строка ervletResponse, FilterChain): 508 Строка Ajax4jsfFilter.doFilter (ServletRequest, ServletResponse, FilterChain): 56
Строка SeamFilter $ FilterChainImpl.doFilter (ServletRequest * ServletResponilFF): Журнал ServletReponseFilterFerlet_Farlet_Fort):: 60
SeamFilter $ FilterChainImpl.doFilter (ServletRequest, ServletResponse) строка: 69
SeamFilter.doFilter (ServletRequest, ServletResponse, FilterChain) строка: 158 ApplicationFilterChain.internalvilletFilter: 5-й финтер-фильтрФайл:Строка doFilter (ServletRequest, ServletResponse): 206
Строка StandardWrapperValve.invoke (Запрос, Ответ): 233
Строка StandardContextValve.invoke (Запрос, Ответ): 191
Строка StandardHostValve.invoke (Запрос, ответ):127
Строка ErrorReportValve.invoke (Запрос, Ответ): 102
Строка AccessLogValve.invoke (Запрос, Ответ): 555
Строка StandardEngineValve.invoke (Запрос, Ответ): 109 CoyoteAdapter.servicСтрока e (Запрос, Ответ): 298
Строка Http11AprProcessor.process (long): 861
Строка Http11AprProtocol $ Http11ConnectionHandler.process (long): 579
AprEndpoint $ Worker.run () Строка: 1584 Поток.run () строка: 619 [локальные переменные недоступны]

1 голос
/ 02 декабря 2010

Это связано с Windows (то есть MS Windows) и нативными вызовами базовой ОС.Обычно это оконные операции типа GUI, но могут быть и другие специфичные для ОС вещи, например, связанные с буфером обмена или шрифтами.

Если в вашем коде нет ничего очевидного, что может быть связано с тем, почемухотя это срабатывает, я бы не беспокоился об этом - это предупреждение больше для общего случая, когда выделение новых потоков в веб-приложении - это не то, что вы должны явно делать без полного понимания потенциальных проблем.

0 голосов
/ 30 декабря 2010

Работаете ли вы с некоторой графической библиотекой, такой как Jasper, JFreechart, LiquidOffice, StyleReport, ..., которая может взаимодействовать с AWT?

Попробуйте запустить tomcat, указав -Djava.awt.headless = trueсвойство видеть, что избавляется от исключения

...