Сбой Tomcat с java.lang.OutOfMemory Ошибка при попытке отправить HTTP-запрос - PullRequest
0 голосов
/ 10 мая 2018

У нас есть служба, развернутая на Tomcat 8. Обычно она работает нормально, но наблюдается, что иногда tomcat внезапно аварийно завершает работу. Сегодня, когда это произошло, я нашел следующие логи:

 SEVERE org.apache.tomcat.util.net.NioEndpoint$Acceptor.run 
       java.lang.OutOfMemoryError: Java Heap Space

Я понял, что это произошло, когда служба пыталась выполнить запрос POST. Код для того же выглядит следующим образом:

  URL obj = new URL(url);
  HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
  con.setRequestMethod("POST");
  con.setRequestProperty("User-Agent", USER_AGENT);
  con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

  con.setDoOutput(true);
  DataOutputStream wr = new DataOutputStream(con.getOutputStream());
  wr.writeBytes(urlParameters);
  wr.flush();
  wr.close();

  int responseCode = con.getResponseCode();
  BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
  String inputLine;
  while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
  in.close();

В чем может быть причина крушения котов? Это из-за одной из следующих причин?

  1. Большинство ресурсов, таких как outputstream and inputstream, не закрыты?
  2. Также соединение HttpsURLC con не закрыто / отключено?
  3. Если так, то почему это не происходит каждый раз. На самом деле это наблюдается впервые более чем за пару месяцев.
  4. Я также видел, что OME было брошено ByteArray или чем-то в этом роде. Не уверен насчет этого. Просто не забудь что-то увидеть.
  5. Наряду с журналами было замечено следующее исключение: Исключение в потоке "AsyncFileHandlerWriter - #######"

Я застрял в данный момент и беспокоюсь о том, что этот сценарий может повториться. Мне нужно найти основную причину для того же. Любая помощь или совет относительно этого были бы действительно полезны.

1 Ответ

0 голосов
/ 10 мая 2018

Добавьте следующее к аргументам jvm:

-Xms512m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError

При следующей ошибке вы увидите файл * .hprof в вашей папке автозагрузки.Используйте профилировщик, чтобы открыть его, мои фавориты yjp и mat .Любой из них покажет вам главных претендентов на кучу в приложении, а также количество потоков и использование ресурсов.

Надеюсь, это поможет.

...