Назад | Перейти на главную страницу

fork: ресурс временно недоступен из-за Java-процесса tomcat

Мы используем Red Hat Enterprise Linux Server 7.4 (Maipo) и tomcat 8.5.30. При доступе к веб-сайту количество процессов для java-процесса быстро увеличивается и достигает той степени, когда максимальное количество пользовательских процессов пересекается, и мы получаем fork: Ошибка временно недоступного ресурса

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

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking
LimitNOFILE=65535

Environment=JAVA_HOME=/usr/java/jdk1.8.0_161/jre
Environment=CATALINA_PID=/u01/tomcat-lb1/temp/tomcat.pid
Environment=CATALINA_HOME=/u01/tomcat
Environment=CATALINA_BASE=/u01/tomcat-lb1
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Dconnector.ip=10.40.5.22 -Dconnector.port=901'

ExecStart=/u01/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=ipMonitor
Group=kcAlerts
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

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

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

Вы (или разработчик вашего приложения) также должны убедиться, что все исключения правильно обрабатываются и все ресурсы, используемые во временном потоке (соединения, файлы и т. Д.), Должным образом освобождены до закрытия потока, чтобы избежать утечек потока.

Отправка сигнала SIGQUIT на java process заставит его создать дамп потока для стандартного вывода: полный список всех его потоков выполнения и того, что каждый поток делает в данный момент. Предоставление дампа потока разработчику приложения должно помочь разработчику определить, какие потоки не очищаются должным образом, и, надеюсь, устранить основную причину.

java---1896*[{java}]

Здесь {фигурные скобки} в pstree вывод указывает дочерние потоки, в отличие от множества дочерних процессов с одинаковыми именами.