Поэтому я разработал микросервис с пружинной загрузкой, который принимает файл multipart
, а затем перенаправляет его в другой сервис, работающий за пределами сети kubernetes.
Когда я загружаю файл размером более 20 МБ, я получаю следующую ошибку:
java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Unknown Source) ~[na:na]
at java.base/java.io.ByteArrayOutputStream.grow(Unknown Source) ~[na:na]
at java.base/java.io.ByteArrayOutputStream.ensureCapacity(Unknown Source) ~[na:na]
at java.base/java.io.ByteArrayOutputStream.write(Unknown Source) ~[na:na]
at org.springframework.util.StreamUtils.copy(StreamUtils.java:143) ~[spring-core-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.ResourceHttpMessageConverter.writeContent(ResourceHttpMessageConverter.java:132) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.ResourceHttpMessageConverter.writeInternal(ResourceHttpMessageConverter.java:124) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.ResourceHttpMessageConverter.writeInternal(ResourceHttpMessageConverter.java:45) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:227) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:417) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:393) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:373) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:277) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:95) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:948) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
Сам сервис не создает sh. Количество барана не должно быть проблемой. Сначала я установил его на 512 МБ, а затем увеличил до 1024 МБ
limits:
cpu: 200m
memory: 1024Mi
requests:
cpu: 200m
memory: 1024Mi
Код java, обрабатывающий загрузку:
params.add("file", new MultipartInputStreamFileResource(multipartfile.getInputStream(),
multipartfile.getOriginalFilename()));
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(requestUrl);
for (Entry<String, List<Object>> entry : params.entrySet()) {
builder.queryParam(entry.getKey(), entry.getValue());
}
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
restTemplate.postForObject(requestUrl, requestEntity, String.class);
Java пружина работает по умолчанию настройки. Я только увеличил максимальный загружаемый файл tomcat ...