Как закрыть http-соединение с помощью Sping Webflux? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть веб-сервис, использующий 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 клиентов.

Понятия не имею, как это исправить. Пожалуйста помоги! (

...