Ubuntu 14.04 TCP erstellte Hash-Tabelleneinträge

Ubuntu 14.04 TCP erstellte Hash-Tabelleneinträge

Ein bisschen Hintergrund

Ich betreibe zwei Server mit hohem Datenverkehr, einen mit Ubuntu 12.04 (Linux 3.2.0-69-generic) und einen mit Ubuntu 14.04 (Linux 3.13.0-52-generic). Ich versuche jetzt, beide abzusichern. Beide haben sehr ähnliche Hardwareressourcen (dieselbe Anzahl an CPUs, aber der 12.04er hat nur 8 GB RAM, während der 14.04er 16 GB hat).

Ich wollte die UFW-Firewall aktivieren, hatte aber Probleme mit der vollen NF_CONNTRACK-Tabelle. Pakete wurden grundsätzlich gelöscht.

Ich habe eine Lösung dafür gefunden, indem ich die Timeouts verringert und die Tabellengröße sowie die Anzahl der Buckets erhöht habe. Das heißt:

net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_max = 196608
net.netfilter.nf_conntrack_buckets = 24576

Diese Werte werden ordnungsgemäß aktualisiert und überstehen den Neustart. (Siehedieser Blog) Ich sehe auch, dass der conntrack_count deutlich über den Standardwert angehoben wird, also bin ich sicher, dass dies auf beiden Servern funktioniert. Die Werte bleiben deutlich unter den Grenzwerten, also bin ich sicher, dass es in Ordnung ist.

Das Thema

Der 12.04-Server funktioniert unter hoher Belastung einwandfrei, aber der 14.04 verliert ständig Pakete, was zu Client-Timeouts führt. Jetzt beim Booten auf 14.04 kann ich diese Zeile in kern.log sehen:

TCP established hash table entries: 131072 (order: 8, 1048576 bytes)

Am 12.04. heißt es:

TCP established hash table entries: 524288 (order: 11, 8388608 bytes)

Ich vermute, dass dies der Grund sein könnte, warum mein Server Pakete verliert, da diese Tabelle im Hinblick auf das Verkehrsaufkommen am 14.04. möglicherweise zu klein ist.

Also habe ich nach einer Möglichkeit gesucht, diese Größe einzustellen, und habe den Parameter thash_entries gefundensiehe hierzur Erklärung). Ich kann es jedoch nicht mit sysctl einstellen.

Hier sind meine Fragen:

  1. Ist diese TCP-Verbindungstabelle wirklich die Ursache meines Problems? Oder sollte ich woanders suchen?
  2. Wenn ja, wie kann ich es einstellen und dafür sorgen, dass es einen Neustart übersteht?

Vielen Dank im Voraus für jede Hilfe und zögern Sie nicht, mich zu fragen, wenn Sie weitere Hilfe benötigen.

PS: Ich bin eher ein Entwickler als ein Systemexperte und würde mich daher über jede ausführliche Antwort freuen :)

Antwort1

Das Optimieren des Linux-Kernels für einen hohen Netzwerkdurchsatz ist eine Kunst, die auf Ausgewogenheit basiert.

Das Erhöhen der Connection Tracker-Tabelle ist in Ordnung, bedeutet aber, dass potenziell mehr Sockets verwendet werden, was wiederum bedeutet, dass das System mehr Dateideskriptoren benötigt, und das Rad dreht sich weiter …

In Ihrem Fall würde ich mit den folgenden Kerneleinstellungen beginnen:

net.core.somaxconn

Und

fs.file-max

Der erste Wert bestimmt die Anzahl der offenen Sockets, die der Kernel unterstützt. Der zweite Wert wird verwendet, um die Anzahl der verwendeten Dateideskriptoren festzulegen, die vom Kernel unterstützt werden.

Dann gibt es noch den SYN-Rückstand, der weiter optimiert werden kann.

net.ipv4.tcp_max_syn_backlog

Legt die Anzahl der Verbindungen fest, die auf eine Bestätigung von Ihrem Server warten können.

net.ipv4.tcp_syncookies

Damit das SYN-Backlog funktioniert, müssen Sie TCP-SYN-Cookies aktivieren.

Schließlich können auch einige Optimierungen vorgenommen werden, wie z. B. die Aktivierung der TIME_WAIT-Verbindungswiederverwendung.

net.ipv4.tcp_tw_reuse

Dadurch kann möglicherweise die Anzahl der „neuen“ Sockel verringert werden, die geöffnet werden, wenn Sie einen Spike erhalten.

Und das ist nur die Spitze des Eisbergs. Meine Erfahrung mit Linux/UNIX-Systemen mit hohem Datenvolumen zeigt, dass man einige Monate lang daran herumbasteln muss, bevor man die richtige Balance findet.

Achten Sie darauf, dass Sie nach Fehlern suchen /var/log/kern.log, um /var/log/messagesbei der weiteren Fehlerbehebung zu helfen.

Kernel optimieren

High Throughput Computing-Administrationshandbuch

verwandte Informationen