Мы используем 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
вывод указывает дочерние потоки, в отличие от множества дочерних процессов с одинаковыми именами.