powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как полечить Deadlock Tomcat в методе openJarFile?
9 сообщений из 9, страница 1 из 1
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560489
kidar2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иногда tomcat (Tomcat 8.5.23 на Ununtu server, java8) находится в deadlock, и ничего с ним не сделать. Удалось получить дамп потоков, в котором видно следующее

Stack trace заблокированных потоков:
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:63)
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:256)
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:95)
org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1067)
org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)



Stack trace проблемного потока, который заблокировал другие:
java.util.zip.ZipFile.open(Native Method)
java.util.zip.ZipFile.(ZipFile.java:219)
java.util.zip.ZipFile.(ZipFile.java:149)
java.util.jar.JarFile.(JarFile.java:166)
java.util.jar.JarFile.(JarFile.java:103)
org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:308)
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:93)
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:260)
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:95)
org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1067)
org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)


В то же время количество открытых файлов в ОС далеко от максимума. Проблем с нехваткой памяти нет, CPU не загружен.
На это сервере размещено только одно веб-приложение.
Кто-нибудь сталкивался с подобным?
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560498
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему локов в дампе не видно?
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560508
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kidar2,

Как workaround могу предложить написать однопоточный экзекутор для newDocumentBuilder().

Код: java
1.
2.
3.
4.
5.
6.
ExecutorService documentBuilderThread = Executors.newSingleThreadExecutor();

...

Future<DocumentBuilder> future = documentBuilderThread.submit(this::createDocumentBuilder);
DocumentBuilder db = future.get();
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560512
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На deadlock не очень-то похоже. На чем
java.util.zip.ZipFile.open(Native Method)
заблокировался - не понятно.
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560513
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kidar2,
Может диск проверить и томкат переставить? Сетевых ресурсов, случайно, нигде в classpath не прописано?
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560544
kidar2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Блокировка произошла в
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:93)

авторМожет диск проверить и томкат переставить? Сетевых ресурсов, случайно, нигде в classpath не прописано?

Tomcat уже обновлял с 8.5.13 до 8.5.23. Проблема проявляется на 3 разных серверах в aws. Сетевых ресурсов нету

авторКак workaround могу предложить написать однопоточный экзекутор для newDocumentBuilder().

Не очень понимаю, как это может помочь?
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560557
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kidar2Блокировка произошла в
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:93)

Да, мне понятно это. Объяснять не нужно. Только там не блокировка произошла, а лок захватился. Потом завис ZipFile.open в связи с чем лок в AbstractSingleArchiveResourceSet не освободился и все кто пытаются на нём синхронизироваться - вешаются.
Просто в вашем дампе локов нет и почему вы решили что это именно deadlock - мне не понятно. Вы ведь не знаете на чем ZipFile.open заблокировался.

kidar2Не очень понимаю, как это может помочь?
Если это и правда deadlock, то вы сведёте множество потоков в к одному и они друг-друга блокировать не будут.
Но это никак не поможет, если проблема системная в чтении файла.
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39560565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ещё Xerces-у просунуть тип конфигурации через System Property
https://xerces.apache.org/xerces2-j/faq-xni.html
Чтобы эта падла не лазила по jar-ам на каждый пук в поисках настроек.
...
Рейтинг: 0 / 0
Как полечить Deadlock Tomcat в методе openJarFile?
    #39561781
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kidar2,

Может JAR-ник поврежден? С похожей проблемой сталкиваюсь периодически.
Помогает очистка папки конкретной зависимости в maven-хранилище и пересборка проекта.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как полечить Deadlock Tomcat в методе openJarFile?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]