не успевает их обработать -> растут директ буфера
Надо сконфигурить back pressure
Устанавливал пропертю -Dio.netty.maxDirectMemory=268435456, не помогла, растет дальше память
Пробовал с пропертей jvm -XX:MaxDirectMemorySize, отваливается клиент с HTTP/1.1 header parser received no bytes
Последнее сообщение очень похоже на HTTP-клиент из JDK. Вы в итоге что используете-то, Netty напрямую или Ktor? В последнем случае точно не надо думать про backpressure, проблема в другом месте.
Ок, допустим. А какой engine? А Netty вы где-нибудь напрямую используете? И я не очень понимаю, что вы пытаетесь исправить увеличением лимита на direct буферы, если их больше, чем нужно.
engine = Netty напрямую нигде не используем
Тогда вряд ли стоит туда лезть. Если буферы утекают, это баг в Ktor. Можно поискать их в хипдампе. А "HTTP/1.1 header parser received no bytes" откуда вылетает, из Ktor с Netty?
эксепшен на клиенте, на него вообще нет смысла обращать внимание - я это написал лишь к тому, если порезать память на оффхип - клиент падает в хипдампе оффхип данные вряд можно найти, или я что то не знаю?
Если растёт direct память, в хипе валяются соответствующие буферы
не очень понимаю что я по ним пойму у меня есть трейс откуда аллоцируются эти директ буфера но полезного от этого мало https://pastebin.com/VRZQmeMn
Аллоцируются они понятно где, непонятно, кто их держит и зачем. Хотя вы и с этим вряд ли что-то сделаете, если это баг в фреймворке, но вдруг.
зачем они держатся понятно - это байтики от запроса и их нужно запроцессить ожидалось - если бекенд не успевает процессить данные, должна снижаться скорость на уровне сети, но почему то данные начинают кешироваться на бекенде
Значит, их кто-то (Ktor) вычитал из сокета раньше, чем надо. Но вдруг там что-то другое происходит.
Кстати, в @kotlin_jvm скорее всего больше людей с таким же стеком
Обсуждают сегодня