У меня есть веб-сервис, использующий Spring Boot 2.1.8 и Spring Webflux 5.1.9. Этот сервис работает на сервере Centos. Каждый день многие клиенты (мобильные устройства) вызывают некоторый POST HTTP-запрос к этой службе с некоторыми данными (приложение, запущенное на клиенте, записывается JavaScript, поэтому они вызывают через XmlHttpRequest вместо Spring WebClient), а клиент просто подключается к сети. час в день.
Это класс контроллера моего сервиса:
@RestController
public class BaseController {
@Autowired
private LogicService logicService;
@PostMapping("/log")
public Mono<String> handleLog(@Valid @RequestBody Log log) {
return logicService.catchLog(log);
}
}
Внутри catchLog
функция, у меня есть блок try-catch, поэтому он не может генерировать никаких исключений.
Проблема в том, что через несколько дней мой сервер выдал предупреждение об утечке памяти. Внутри журналов сервисов я видел много таких предупреждений:
2020-02-14 22:53:23.357 [reactor-http-epoll-1] WARN io.netty.channel.DefaultChannelPipeline --- An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.channel.unix.Errors$NativeIoException: accept(..) failed: Too many open files
Я проверил свою серверную систему и там было 100000 файлов, открывающих карту с 100000 подключений. Но я знаю, что одновременно невозможно иметь более 1000 клиентов.
Понятия не имею, как это исправить. Пожалуйста помоги! (