У меня есть производственная проблема, которую я не могу воспроизвести в среде разработки или тестирования. Кроме того, поскольку он находится в производстве, я не могу остановить / запустить 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. Будем весьма благодарны за любые подсказки относительно того, что происходит.