Ich habe Probleme mit wiederkehrenden Problemen mit Netty 4. Meine App fragt Minecraft-Server nach Informationen ab und aktualisiert eine Datenbank mit diesen Informationen. Derzeit erstellt es alle 10 Sekunden 300 Verbindungsanforderungen und sendet Pakete, wenn diese Verbindungen erfolgreich abgeschlossen wurden.
Eine vorherige Iteration meiner Abfrage-App verwendete Netty 3.2.5 und lief monatelang nonstop ohne Probleme. Mit Netty 4 läuft es jedoch nur ein paar Stunden, bevor alle verfügbaren Ressourcen erschöpft sind. Hier ist ein Screenshot der Speicherabtastung über eine JMX-Verbindung.
Wie wir sehen können, verbraucht io.netty.channel.ChannelOutboundBuffer$Entry
eine große Menge an Speicher. Irgendeine Idee, wie man das Problem beheben kann? Ich bin verfügbar, um Code zur Verfügung zu stellen, wenn Sie brauchen. Danke!
Stephen C: Dies ist kein Duplikat von "Wie finde ich ein Java-Speicherleck?". Das hat speziell mit Netty zu tun, und ich versuche nicht herauszufinden, wie man ein Speicherleck entdeckt - ich habe es bereits mit Netty entdeckt. Ich habe meine Frage erneut gestellt, sodass ich eine Chance habe, eine Antwort zu erhalten.
Dies liegt wahrscheinlich an einer falschen Verwendung des Objekts reference counted (ein neues in Netty 4 eingeführtes Prinzip). Dein Kanal gibt ein Objekt nicht korrekt frei.
Sie können -Dio.netty.leakDetectionLevel=paranoid
verwenden, um eine automatische Speicherleckerkennung in Netty zu aktivieren.
Siehe die Dokumentation hier: Ссылка
Tags und Links java memory-leaks netty