자바 6 임베디드 HttpServer가 있습니다. 그것은 클라이언트가 큰 텍스트 파일을 다운로드 할 수있는 핸들이 있습니다. 문제는 서버가 10 개 이상의 동시 클라이언트를 가지고있을 때 메모리 예외가 발생한다는 것입니다. 나는 그 문제가 Http Server 주위에 있는지 잘 알고있다. java.lang.OutOfMemoryError on HttpServer on 대용량 데이터 다운로드
HttpServer m_server = HttpServer.create(new InetSocketAddress(8080), 0);
m_server.createContext("/DownloadFile", new DownloadFileHandler());
public class DownloadFileHandler implements HttpHandler {
private static byte[] myFile = new String("....................").getBytes(); //string about 8M
@Override
public void handle(HttpExchange exchange) throws IOException {
exchange.sendResponseHeaders(HTTP_OK, myFile .length); OutputStream responseBody = exchange.getResponseBody();
responseBody.write(myFile);
responseBody.close();
}
}
지금 내가 얻을 예외은 : getBytes() 예외를 변경하지 않습니다에 대한
java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(Unknown Source)
at java.nio.ByteBuffer.allocate(Unknown Source)
at sun.net.httpserver.Request$WriteStream.write(Unknown Source)
at sun.net.httpserver.FixedLengthOutputStream.write(Unknown Source)
at java.io.FilterOutputStream.write(Unknown Source)
at sun.net.httpserver.PlaceholderOutputStream.write(Unknown Source)
at com.shunra.javadestination.webservices.DownloadFileHandler.handle(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.AuthFilter.doFilter(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source)
at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source)
at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception in thread "pool-1-thread-24" java.lang.OutOfMemoryError:
제안. 나는 매번 그것을 생성하는 대신에 바이트 []에 대한 정적 참조를 유지하려고 시도했다. 그리고 나는 여전히 같은 예외를 얻는다.
하십시오이 한 번에이 문제가 될 수처럼 코드 주위에 약간의 "코드 따옴표".. – kgautron
@Sophie이 소리; Java 문제 및 스레드 처리 문제가 있습니다. HTTP 서버에 얼마나 많은 연결을 허용합니까? 어떤 HTTP 서버를 사용하고 있습니까? – bakoyaro
@Sophie 또한 소스를 컴파일 할 때 debug = true로 설정하면 스택 추적에서 줄 번호를 가져와야합니다. – bakoyaro