Как корректно завершить работу сервлетов в tomcat в контейнере докеров?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как корректно завершить работу сервлетов в tomcat в контейнере докеров?

Сообщение Anonymous »

Что я узнал на данный момент:
  • Остановка докера отправляет SIGTERM для обработки идентификатора 1 в контейнере.
  • Идентификатор процесса 1 в контейнере — это Java-процесс, запускающий tomcat.*)
  • Да, сам tomcat корректно завершает работу, но не сервлеты. >
  • Сервлеты уничтожаются после 2 секунд, даже если они находятся в процессе обработки запроса(!!)
*) Примечание:
Хотя наша точка входа в контейнер [ "/opt/tomcat/bin/catalina.sh", "run" ], но
в catalina.sh Java-процесс запускается с помощью команды bash buildin "exec",
и, следовательно, Java процесс заменяет процесс оболочки и таким образом становится новым идентификатором процесса 1.
(Я могу проверить это с помощью exec в работающем контейнере и выполнить там «ps aux».)
Кстати, я использую tomcat 7.0.88.< /p>
Я нашел утверждения о том, что Tomcat по умолчанию выполняет корректное завершение работы. (http://tomcat.10.x6.nabble.com/Graceful ... 20523.html - «любые текущие соединения будут завершены»), но все, что я вижу, это то, что SIGTERM, который отправляется из докера в Java-процесс практически не останавливает текущее выполнение запроса.
Я написал небольшой сервлет для проверки этого поведения:

Код: Выделить всё

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.core.Response.Status;

@Path("/")
public class SlowServerRes
{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("test1")
public Response test1(@QueryParam("sleep") final int sleepDurationSec)
{
long received = System.currentTimeMillis();
System.out.println("+++++++++++++++++++++ received request at " + received);

for (int i=1; i SIGTERM), просто чтобы сохранить нагрузка сбалансированный.) 

Подробнее здесь: [url]https://stackoverflow.com/questions/51675180/how-to-gracefully-shutdown-servelts-in-tomcat-in-docker-container[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»