Wie bekomme ich ein Linux-Netzwerkprotokoll?

12

Wir haben einen Java-Server, der unter Linux an einem bestimmten Port ausgeführt wird und dauerhafte Verbindungen für Tausende und Abertausende von Benutzern akzeptiert. In letzter Zeit können unsere Kunden keine Verbindung mit einem Timeout-Fehler herstellen. Wir vermuten, dass der Datenverkehr zu hoch wird, aber unser Java-Protokoll zeigt tatsächlich, dass nicht viele pro Sekunde verbunden sind.

Wir vermuten, dass es sein könnte, dass zu viele gleichzeitig versuchen und sie im Grunde genommen auf Betriebssystemebene gelöscht werden und daher das Java-Programm nie wirklich die Chance bekommt, die Verbindung zu akzeptieren? Gibt es eine Art von Linux-Protokoll, das zeigt, dass jemand versucht, einen Socket zu treffen?

erotsppa
quelle

Antworten:

7

iptables -I INPUT -p tcp --dport some_port -j LOGAnschließend können Sie
tail -f /var/log/messages
überprüfen, wie viele Daten von dieser Regel betroffen sind: iptables -L -n -v
Oder Sie können tcpdump ausführen und die Ports durchsuchen.

James L
quelle
2
+1. Eine leichte Modifikation könnte besser funktionieren , nur die neuen Verbindungsversuche zu fangen: iptables -I INPUT -p tcp --dport some_port -m state --state NEW. Beachten Sie, dass Sie -j LOGdie Systemprotokolldatei nicht mit vielen nicht benötigten Daten überfluten, wenn Sie die Details der einzelnen Verbindungsversuche nicht berücksichtigen.
Steven Montag
3

Wenn ich wirklich böse Netzwerkprobleme habe, neige ich dazu, Wireshark zu starten . Für mich gibt es kein besseres Netzwerkdiagnosetool, wenn ich mich auf die kleinsten Details konzentrieren muss. Machen Sie sich keine Sorgen, wenn Sie es weder auf der Quell- noch auf der Ziel-Box installieren können. Sie können ausführen tcpdump -w, um Paketdaten auf Start- und / oder Endpunkt in eine Datei zu schreiben und die Datei nach Belieben auf einer anderen Box an Wireshark weiterzuleiten.

MadHatter
quelle
Ja, ich würde empfehlen, einen Filter darauf zu setzen, wietcpdump -nS dst port <some port>
Gravyface
0

Wäre gut, um genau zu sehen, was Ihre Java-Threads auf Socket-Ebene bekommen. Gleichzeitig möchten Sie dies mit den Netzwerkinformationen des Betriebssystems korrelieren. Schauen Sie sich AppFirst an. Sie können so etwas tun.

IAPaddler
quelle
0
watch -n1 -d "netstat -an | grep ESTABLISHED | wc -l"

Zeigt die aktuell eingerichteten Verbindungen an.

Vergleichen Sie dies mit Ihren aktiven ulimitEinstellungen und natürlich mit der maximalen Anzahl von Verbindungen, die Ihre Java-App verarbeiten kann.

sjas
quelle