WebappClassLoader периодически занимает 12 секунд для загрузки локального файла JAR - PullRequest
0 голосов
/ 05 марта 2012

У меня есть производственная проблема, которую я не могу воспроизвести в среде разработки или тестирования. Кроме того, поскольку он находится в производстве, я не могу остановить / запустить Tomcat без большого количества волокиты.

Я наблюдаю задержки около 12 секунд (дать или взять 500 мс) в потоках выполнения, которые используют класс AudioSystem. Задержки происходят с перерывами и никогда в течение нескольких минут друг от друга. Другие потоки протекают одновременно без проблем. Задержки становятся реже при более высокой нагрузке.

Мне удалось собрать следы стека, пока происходит задержка, с помощью вкладки потоков JConsole. например,

Name: http-8081-Processor27
State: RUNNABLE
Total blocked: 134,991  Total waited: 23,132

Stack trace: 
java.util.zip.ZipFile.open(Native Method)
java.util.zip.ZipFile.<init>(Unknown Source)
java.util.jar.JarFile.<init>(Unknown Source)
java.util.jar.JarFile.<init>(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.openJARs(WebappClassLoader.java:1789)
org.apache.catalina.loader.WebappClassLoader.findResources(WebappClassLoader.java:1019)
java.lang.ClassLoader.getResources(Unknown Source)
sun.misc.Service$LazyIterator.hasNext(Unknown Source)
com.sun.media.sound.JSSecurityManager$7.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
com.sun.media.sound.JSSecurityManager.getProviders(Unknown Source)
com.sun.media.sound.JDK13Services.getProviders(Unknown Source)
javax.sound.sampled.AudioSystem.getProviders(Unknown Source)
javax.sound.sampled.AudioSystem.getAudioFileReaders(Unknown Source)
javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)

Похоже, что загрузка файлов JAR с помощью WebappClassLoader подразумевает. Я настроил загрузчик классов в среде разработки, чтобы выйти из JAR-файлов, которые он загружает. Загружено 55 файлов JAR, все с локального диска, например:

Fri Mar 02 17:02:04 EST 2012    About to open: E:\mycompany\Apps\Apache\Tomcat 5.5\webapps\application\WEB-INF\lib\log4j-1.2.15.jar

На сервере неправильно настроен прокси-сервер. Это может привести к 12-секундным задержкам при загрузке веб-страниц. Однако среды DEV и TEST также неправильно настроены, но пока не показывают задержек. Приведет ли это к тому, что Java будет показывать задержки при доступе к локальным файлам JAR?

Tomcat был выделен максимальный объем памяти 1500 МБ. GC является ConcurrentMarkSweep и никогда не использует более 800 МБ.

Сервер построен на Windows 2003, Tomcat 5.5.23, Java 1.5.0-v14. Будем весьма благодарны за любые подсказки относительно того, что происходит.

1 Ответ

0 голосов
/ 05 марта 2012

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

Это может помочь вам отследить проблему, если вы временно попросите Java использовать внутренний прокси-сервер, чтобы вы могли видеть, что загрузчик классов пытается получить из Интернета.

...