Welche Ressourcen werden für die Bereitstellung statischer Inhalte benötigt? Wie viel RAM wird für jede Dateiübertragung verwendet?
Erstens verwendet G-WAN v4.7 + bei gleicher Anzahl von Mitarbeitern beim Start weitaus weniger RAM als Nginx:
> Server 'nginx' process topology:
---------------------------------------------
6] pid:21228 Process RAM: 0.77 MB
5] pid:21229 Process RAM: 2.44 MB
4] pid:21230 Process RAM: 2.44 MB
3] pid:21231 Process RAM: 2.44 MB
2] pid:21232 Process RAM: 2.44 MB
1] pid:21233 Process RAM: 2.44 MB
0] pid:21234 Process RAM: 2.44 MB
---------------------------------------------
Total 'nginx' server footprint: 15.39 MB
> Server 'gwan' process topology:
---------------------------------------------
6] pid:6054 Thread
5] pid:6053 Thread
4] pid:6052 Thread
3] pid:6051 Thread
2] pid:6050 Thread
1] pid:6049 Thread
0] pid:5839 Process RAM: 2.19 MB
---------------------------------------------
Total 'gwan' server footprint: 2.19 MB
G-WAN verwendet Threads (normalerweise einen pro Kern), Nginx verwendet Prozesse (normalerweise einen pro Kern) und Prozesse verursachen mehr Overhead, erfordern eine Synchronisierung über den gemeinsam genutzten Speicher usw. Beide verwenden das "asynchrone" Modell der Ereignisbehandlung.
Beachten Sie, dass G-WAN hier automatisch auf mehr als 1 Million gleichzeitige Verbindungen anwachsen kann, während Nginx auf seine worker_connections
Einstellungen beschränkt ist (im obigen ab.c- Test nur auf 4096 definiert ).
Was mir nicht klar ist, ist, ob es pro Verbindung Speicher-Overhead gibt: dh ob Nginx oder Gwan für jeden Treffer Speicher verbrauchen?
Die Kurzgeschichte besagt, dass G-WAN v4.7 + (bei dem das In-Memory-Caching standardmäßig deaktiviert ist) für alle Dateigrößen viel weniger RAM als Nginx verbraucht und gleichzeitig mehr Anforderungen pro Sekunde bearbeitet.
Die lange Geschichte ist, dass Nginx selbst bei neuen HTTP-Keep-Alived-Anforderungen immer mehr Speicher verbraucht, die Speichernutzung von G-WAN jedoch für HTTP-Keep-Alived-Anforderungen stabil bleiben kann und weit weniger wächst als bei Nginx mit Non-Keep-Alived Anfragen.
Unser weighttp-Wrapper ab.c misst den Speicherverbrauch der Serveranwendung und des Systems für die Dauer des Tests. Und es zeigt, dass Nginx das System in Bezug auf den Speicherressourcenverbrauch stärker belastet.
Dies liegt an der Art und Weise, wie jeder Webserver Anforderungen verarbeitet und Speicher zuweist.
Wenn ich 10 Anfragen für eine 5-MB-Datei gleichzeitig habe, bedeutet dies, dass 50 MB Speicher für die Bereitstellung verwendet werden? Vielleicht + Speicher für Threads (Ich weiß nicht, ob Nginx oder Gwan Threads für jede Verbindung verwenden).
Beide Server (Nginx und G-WAN) verwenden, sendfile()
sodass der Kernel (und nicht die Anwendung) die Ressourcen für E / A zuweist.
Die Webserver weisen weiterhin Ressourcen zu, dies dient jedoch dazu, den Kontext jeder Verbindung beizubehalten, anstatt die Datenträger-E / A zu puffern.
Daher hängt der Momory-Verbrauch von der Größe der bei jedem sendfile()
Aufruf gesendeten Dateiblöcke ab und nicht direkt von der Gesamtgröße der Datei.
Die Größe der Totfiles hat einen langfristigen Einfluss auf hohe Parallelitäten. Dies liegt jedoch an der Anzahl der Chunks, die vom Kernel zwischengespeichert werden müssen.
Wenn Sie weitere Fragen haben, schreiben Sie uns eine E-Mail an G-WAN. Wir haben stark in CDN-ähnliche Anwendungen investiert.