尝试发送HTTP请求时,Tomcat与java.lang.OutOfMemory崩溃

时间:2018-05-10 12:25:08

标签: java out-of-memory tomcat8

我们在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();

tomcats崩溃的原因是什么?是因为以下任何原因吗?

  
      
  1. outputstream and inputstream等大多数资源都没有关闭?
  2.   
  3. HttpsURLConnection con是否未关闭/断开连接?
  4.   
  5. 如果是这样,那么为什么每次都不会发生。事实上,这是在超过几个月内第一次观察到的。
  6.   
  7. 我也看到OME被ByteArray抛出或类似的东西。不确定。只记得看到的东西。
  8.   
  9. 除日志外,还发现以下异常:   线程“AsyncFileHandlerWriter - #######”
  10. 中的异常   

我现在陷入困境,并担心这种情况可能再次发生。我需要找到相同的根本原因。任何有关相同的帮助或建议都非常有用。

1 个答案:

答案 0 :(得分:2)

将以下内容添加到jvm参数中:

-Xms512m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError

下次发生错误时,您应该在启动文件夹中看到* .hprof文件。使用分析器打开它,我的收藏夹是yjpmat。两者都将向您展示应用程序中堆的顶级竞争者以及线程数和资源使用情况。

希望这有帮助。