使用接受文件的弹簧控制器防止内存不足错误

mak*_*k-g 5 java upload spring file out-of-memory

假设我正在使用 Spring 设计一个 REST 服务,并且我需要一个接受文件并返回某种 ResponseDto 的方法。应用程序服务器的 POST 请求大小限制为 100MB。这是假设的弹簧控制器方法实现:

public ResponseEntity<ResponseDto> uploadFile(@RequestBody MultipartFile file) {
        return ResponseEntity.ok(someService.process(file));
} 
Run Code Online (Sandbox Code Playgroud)

假设我的服务器有 64GB RAM。如果在短时间内(足够短,足以让process()方法仍然对上传的每个文件运行),1000 个用户决定上传 100MB 文件(或者只有 1 个用户同时上传),如何确保不会出现内存不足错误1000 个文件)?

编辑:为了澄清,我想确保我的应用程序不会崩溃,而只是停止接受/延迟新请求。

sha*_*eel 2

您可以监视内存使用情况并查看何时必须停止接受请求或取消现有请求。 https://docs.oracle.com/javase/6/docs/api/java/lang/management/MemoryMXBean.html

https://docs.oracle.com/javase/6/docs/api/java/lang/management/MemoryPoolMXBean.html

你也可以用这个

Runtime runtime = Runtime.getRuntime();
System.out.println("Free memory: " + runtime.freeMemory() + " bytes.");
Run Code Online (Sandbox Code Playgroud)