«Слишком много открытых файлов» после перехода с Tomcat 7 на Tomcat 9

После перехода с Tomact 7 на Tomcat 9.0.20 (работающего с той же версией Java 1.8.0_25) у нас возникла проблема с нашим веб-приложением JSF2 в Linux RHEL 7. Через некоторое время мы получаем такие исключения:

java.io.FileNotFoundException: /f4m/tomcat/tomcat_f4mbs/webapps/ACM/WEB-INF/acm-config.xml (Too many open files)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)

После некоторого поиска я обнаружил, что существует много дескрипторов открытых файлов для файлов xhtml, выполнив эту команду (где 4025 — идентификатор процесса Tomcat):

ls -l /proc/4025/fd


lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 238 -> /usr/java/jdk1.8.0_25/jre/lib/resources.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 239 -> pipe:[3661823]
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 24 -> /f4m/tomcat/tomcat_f4mbscrm/lib/websocket-api.jar
l-wx------. 1 f4mHttp f4mHttp 64 May 16 09:01 240 -> pipe:[3661823]
lrwx------. 1 f4mHttp f4mHttp 64 May 16 09:01 241 -> anon_inode:[eventpoll]
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 243 -> pipe:[3661824]
l-wx------. 1 f4mHttp f4mHttp 64 May 16 09:01 244 -> pipe:[3661824]
lrwx------. 1 f4mHttp f4mHttp 64 May 16 09:01 245 -> anon_inode:[eventpoll]
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 246 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/msgBox.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 247 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/msgBox.xhtml
lrwx------. 1 f4mHttp f4mHttp 64 May 16 09:01 248 -> socket:[3667364]
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 249 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/searchpage.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 25 -> /f4m/tomcat/tomcat_f4mbscrm/lib/jasper.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 250 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/searchpage.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 251 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/portal/nav/portalheader.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 252 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/portal/customizing/nav/menu.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 253 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 254 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/nav/bottomPanel.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 255 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/nav/bottomPanel.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 256 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/msgBox.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:01 257 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 258 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 259 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 26 -> /f4m/tomcat/tomcat_f4mbscrm/lib/ecj-4.9.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 260 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 261 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 262 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/common/barcodefunction_incl.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 263 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/portal/nav/portalfooterAll.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 264 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartner.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 266 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartner.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 267 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/portal/nav/portalheader.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 268 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/portal/customizing/nav/menu.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 27 -> /f4m/tomcat/tomcat_f4mbscrm/lib/catalina-ha.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 274 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartner_topnav.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 275 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/msgBox.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 276 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/msgBox.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 277 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 278 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 279 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 28 -> /f4m/tomcat/tomcat_f4mbscrm/lib/jsp-api.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 280 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 281 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 282 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 283 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 286 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 287 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 288 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 289 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 29 -> /f4m/tomcat/tomcat_f4mbscrm/lib/annotations-api.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 290 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 291 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 292 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 293 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartnerparent_incl.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 294 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 295 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 296 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 297 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 298 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartnerHierarchySimilarAddresses.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 299 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartnerchild_incl.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 3 -> /usr/java/jdk1.8.0_25/jre/lib/rt.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 30 -> /f4m/tomcat/tomcat_f4mbscrm/lib/tomcat-i18n-fr.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 300 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 301 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 302 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 303 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 304 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/form/partner/crmpartnerHierarchySimilarAddresses.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 305 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 306 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 307 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 308 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 309 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 31 -> /f4m/tomcat/tomcat_f4mbscrm/lib/tomcat-coyote.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 310 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 311 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 312 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 313 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 314 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 315 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 316 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 317 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 318 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 319 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 08:58 32 -> /f4m/tomcat/tomcat_f4mbscrm/lib/catalina-ant.jar
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 320 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 321 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 322 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 323 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 324 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 325 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 326 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 327 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 328 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml
lr-x------. 1 f4mHttp f4mHttp 64 May 16 09:02 329 -> /f4m/tomcat/tomcat_f4mbscrm/webapps/ACM/resources/components/calendar.xhtml

Это не полный список — их гораздо больше.

Количество перечисленных файлов увеличивается и уменьшается. Мне кажется, что и xhtml (или один из его используемых компонентов) имеет дескриптор открытого файла, пока страница отображается в браузере.

Если я снова разверну одно и то же приложение на Tomcat 7, я смогу увидеть дескрипторы открытых файлов только для JAR-файлов, сокетов, но НИКОГДА не для xhtml.

В чем может быть проблема?

Сравните /etc/init.d/tomcat (я предполагаю, что это то же самое в RHEL) и $TOMCAT_HOME/conf/*, чтобы увидеть, изменилось ли что-нибудь. Часто вам приходится добавлять директивы ulimit в /etc/init.d/tomcat, которые могли быть в 7, но не в 9? Может быть, что-то изменилось в одном из файлов conf?

AlexC 16.05.2019 14:08

Проблема не в том, что лимит изменился. Проблема в том, что Tomcat 7 НИКОГДА не создавал дескриптор открытого файла для файлов xhtml - кнопка Tomcat 9 делает...

spitzer_g 17.05.2019 08:25

Получаете ли вы какое-либо предупреждение при запуске о том, что кеш недостаточно велик? Я помню, что мне пришлось добавить директиву для увеличения размера кэша при обновлении до 8 с 7 (и то же самое для 9). conf/context.xml (элемент Context | Resources), я установил атрибуты cachingAllowed = "true" и cacheMaxSize = "100000" и смог запустить приложение, но это только в случае, когда tomcat обслуживает статический контент, в идеале там перед этим должен быть веб-сервер.

AlexC 17.05.2019 15:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
450
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Утечка файла произошла в реализации JSF2 MyFaces, см. также здесь: https://marc.info/?l=myfaces-dev&m=152536956716792&w=2

Мне удалось найти проблему с помощью этого инструмента: http://file-leak-detector.kohsuke.org/

Другие вопросы по теме