Tôi đang làm một biểu mẫu tải lên rất đơn giản cho ứng dụng Google App Engine của mình. Trong mã GWT của khách hàng, tôi có một cái gì đó như:Tải lên Blobstore cung cấp một heap Java OutOfMemoryError
final FormPanel uploadForm = new FormPanel();
uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
uploadForm.setMethod(FormPanel.METHOD_POST);
uploadBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
blobstoreUploadURLService.getBlobstoreUploadURL("/banzai/process-pdf", new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
System.err.println("FAILURE DURING UPLOAD SERVICE");
}
@Override
public void onSuccess(String result) {
uploadForm.setAction(result);
uploadForm.submit();
}
});
}
});
Và nó sử dụng new FileUpload()
để chọn tệp. Khi tôi kiểm tra nó, mạng cục bộ hoặc một trường hợp triển khai, tôi nhận được lỗi sau đây trong các bản ghi:
WARNING: Error for /_ah/upload/agdrYnNrYWFychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YAww java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71)
at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:316)
at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:186)
at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:109)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.handleUpload(UploadBlobServlet.java:135)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.access$000(UploadBlobServlet.java:72)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet$1.run(UploadBlobServlet.java:100)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.doPost(UploadBlobServlet.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:51)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
Điều thú vị đủ, nhiều người dường như đã chạy vào vấn đề này trước (chỉ cần nhìn vào this issue here, và bạn có thể tìm thấy một vài thứ khác trên Google) nhưng dường như không ai biết tại sao nó lại xảy ra và một số người thậm chí còn cho rằng đó là lỗi của App Engine. Trước khi tôi nhảy vào kết luận phát ban này, tôi nghĩ tôi sẽ hỏi ở đây trước tiên :)
Và trong trường hợp nó thú vị, đây là tiêu đề HTTP của tải lên đã cố gắng (một tệp rất nhỏ), được bắt với HTTP Live Headers.
POST /_ah/upload/AMmfu6ZyyhSgz9uOR5VX4QBZeYADTB-aSejVvfGaogl3E_E8yPOLgtX9-0mob17IYfsaRZg-YP7aZrp1D4pDAwuKKm9CoNjeVx1eN2PwBro9x0PqXPeBLpQ/ALBNUaYAAAAATDFOaLPIvuEEhSS6F4HxMmf9xOb8lp0y/ HTTP/1.1 Host: kbskaar.appspot.com User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Referer: http://kbskaar.appspot.com/ Cookie: Lastname=Wong; Firstname=Ka%20Man%20Sophia; Username=kmswong%40uwaterloo.ca Content-Type: multipart/form-data; boundary=---------------------------168072824752491622650073 Content-Length: 57 -----------------------------168072824752491622650073-- HTTP/1.1 500 Internal Server Error Server: Upload Server Built on Jul 1 2010 15:26:59 (1278023219) Content-Type: text/html; charset=UTF-8 X-AppEngine-Estimated-CPM-US-Dollars: $0.375815 X-AppEngine-Resource-Usage: ms=7103 cpu_ms=16217 api_cpu_ms=0 Date: Mon, 05 Jul 2010 03:06:00 GMT Pragma: no-cache Expires: Fri, 01 Jan 1990 00:00:00 GMT Cache-Control: no-cache, no-store, must-revalidate Content-Length: 3211 ----------------------------------------------------------
Vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng nào. Cảm ơn!
Làm thế nào lớn là các tập tin bạn đang tải lên? – markovuksanovic
@markovuksanovic Điều này xảy ra đối với các tệp có kích thước bất kỳ, ngay cả tệp nhỏ hơn 10KB. Chắc chắn không phải trường hợp tôi tải lên quá nhiều - đó cũng là điều đầu tiên tôi nghĩ đến, dĩ nhiên :) –
Ngoài ra, bạn có thể xem toàn bộ nội dung của tệp trong danh sách mã ở trên. Đây là 57 byte. –