cuốn sách gpt4 ai đã làm

"java.lang.OutOfMemoryError: Không gian heap Java" trong khi tải lên tệp hơn 1 GB trong ứng dụng khởi động mùa xuân

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 19:07:50 29 4
mua khóa gpt4 Nike

Tôi hoàn toàn làm theo cái này Hướng dẫn xây dựng ứng dụng khởi động mùa xuân để tải lên một tệp hướng dẫn. Những thay đổi tôi đã thực hiện được mô tả dưới đây.

Tôi đã thêm các thuộc tính sau vào ứng dụng.property:

spring.http.multipart.max-file-size=2048MB
spring.http.multipart.max-request-size=2048MB

Sau đó, tôi đã thêm các tham số jvm sau vào cấu hình chạy dự án để giới hạn kích thước vùng heap jvm ở mức 2GB như câu trả lời này được mô tả trong :

-Xmx2048m

Tiếp theo tôi cũng đảm bảo rằng ứng dụng khởi động mùa xuân của tôi đang chạy trên java 64 bit có vẻ như vậy Java 32-bit yêu cầu không gian heap "liền kề" để dự trữ.

Nhưng khi tôi cố tải lên các tệp lớn, nó vẫn báo lỗi tương tự.

Đầu tiên tôi thử tải lên một tệp 20MB. có hiệu quả. Tiếp theo, tôi tiếp tục và thử giá trị (giá trị) iso của Ubuntu là 1GB, nhưng nó vẫn cho tôi ngoại lệ sau:

java.lang.OutOfMemoryError: Không gian vùng heap Java
tại java.util.Arrays.copyOf(Arrays.java:3236) ~[na:1.8.0_74]
tại java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118) ~[na:1.8.0_74]
tại java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93) ~[na:1.8.0_74]
tại java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153) ~[na:1.8.0_74]
tại org.springframework.util.StreamUtils.copy(StreamUtils.java:128) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:109) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.util.FileCopyUtils.copyToByteArray(FileCopyUtils.java:156) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getBytes(StandardMultipartHttpServletRequest.java:291) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại com.digitate.ignio.spring_boot_hdfs_file_upload.controller.UploadController.singleFileUpload(UploadController.java:73) ~[classes/:na]
tại sun.reflect.NativeMethodAccessorImpl.invoke0(Phương thức gốc) ~[na:1.8.0_74]
tại sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_74]
tại sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74]
tại java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74]
tại org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại javax.servlet.http.HttpServlet.service(HttpServlet.java:648) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
tại javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.6.jar:8.5.6]
tại org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
tại org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]

Tôi hiện có 8GB RAM được cài đặt trên máy của mình, trong đó có 1,5 GB trống. Tôi cũng đã thử chạy ứng dụng khởi động mùa xuân khi tôi có sẵn hơn 2 GB RAM.

Trong quá trình gỡ lỗi, tôi thấy kích thước của tệp được tải lên thực sự là 1+GB:

nhập mô tả hình ảnh ở đây

Nhưng khi thực hiện dòng 73 tập tin.getBytes() , nó sẽ ném ngoại lệ trên.

Tôi đang thiếu gì ở đây?

câu trả lời hay nhất

Đối với các tệp lớn, tốt hơn nên sử dụng vòng lặp while để đọc 1024 byte vào bộ đệm và sau đó ghi bộ đệm vào máy chủ. Mã này đã được thử nghiệm với tệp tải lên 5GB. Bạn cần điều chỉnh các thuộc tính ứng dụng cho phù hợp, tức là ít nhất 5 GB nếu bạn muốn dùng thử

spring.http.multipart.max-file-size=6000MB
spring.http.multipart.max-request-size=6000MB

Đây là đoạn mã được viết bằng Spring framework.

@Ghi đè
public ResponseEntity uploadFile(@RequestParam("file") MultipartFile multipartfile) {
Phản hồi ResponseEntity;
multipartfile.getOriginalFilename();
byte [] bufferedbytes= byte mới [1024];
Tệp tệp = Tệp mới ("/home/david/Music/"+multipartfile.getOriginalFilename());
FileOutputStream outStream = null;
số int=0;
thử {
BufferedInputStream fileInputStream= new BufferedInputStream(multipartfile.getInputStream());
outStream=FileOutputStream mới(tệp);
while((count=fileInputStream.read(bufferedbytes))!=-1) {
outStream.write(bufferedbyte,0,count);

}
outStream.close();
} catch (IOException e) {
reply= new ResponseEntity("Không thể tải lên tệp"+multipartfile.getOriginalFilename(),HttpStatus.PAYLOAD_TOO_LARGE);

trả lời phản hồi;

}

reply= new ResponseEntity("Tệp được tải lên thành công"+multipartfile.getOriginalFilename(),HttpStatus.OK);

trả lời phản hồi;
}

Về java - "java.lang.OutOfMemoryError: Java heap space" trong khi tải lên tệp hơn 1 GB trong ứng dụng khởi động mùa xuân, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/51893585/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress