
Ich habe dies auf Stack Overflow gefragt, aber vielleicht ist es eher eine Frage für die SF-Crew.
Es gab viele Artikel wieDieses hierIch habe kürzlich die Vorzüge des Django Static Generator in Kombination mit einem leichten Front-End-Webserver gepriesen. Für mich macht das sehr viel Sinn.
Allerdings erhalte ich bei weitem nicht die Ergebnisse, die andere Leute melden (Tausende von Anfragen pro Sekunde), und ich weiß nicht, warum das so ist.
Ich bereite mich gerade auf die Neugestaltung der Website meiner Zeitung vor. Ich verwende gerade Static Generator auf einem Testserver. Und wenn ich Apache Bench auf einer bestimmten statischen Seite ausführe, erhalte ich ziemlich miserable Ergebnisse:
ab -c 10 -n 1000 http://journal.streamlister.com/news/
Concurrency Level: 10
Time taken for tests: 53.011 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 21281212 bytes
HTML transferred: 21067360 bytes
Requests per second: 18.86 [#/sec] (mean)
Time per request: 530.107 [ms] (mean)
Time per request: 53.011 [ms] (mean, across all concurrent requests)
Transfer rate: 392.04 [Kbytes/sec] received
Ich beobachte top
den Server, während die Belagerung läuft, und ich kann sehen, dass Apache oder der Datenbankserver überhaupt nicht betroffen sind. Es wird also tatsächlich die zwischengespeicherte Seite bereitgestellt. Nginx läuft, aber die Speichernutzung übersteigt nie 2 %. Die CPU bleibt zu etwa 95 % im Leerlauf.
Was mache ich falsch? Könnte ich nginx irgendwie falsch konfiguriert haben? Meine Hauptkonfigurationsdatei ist unten eingefügt; der für diese Site spezifische Include ist so ziemlich eine Kopie der Beispielkonfiguration auf derHomepage des statischen Generators. Ich verwende Ubuntu 9.10 auf einem 256k-Slice von Slicehost.
user not_my_real_username;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 8192;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
keepalive_timeout 0;
#keepalive_timeout 65;
tcp_nodelay on;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Antwort1
Sie können die Leistung von Nginx steigern, indem Sie der Konfiguration einfach die folgenden Optionen hinzufügen:
http {
open_file_cache max=1000 inactive=300s;
open_file_cache_valid 360s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
}
Antwort2
Ihr Nginx stellt Dateien tatsächlich mit einer angemessenen Geschwindigkeit bereit. Von einem externen Rechner aus konnte ich mit ab
einer der CSS-Dateien auf dieser Seite 371 Anfragen pro Sekunde erhalten.
Sie testen die gesamte Seite, was bedeutet, dass Sie 22 Anfragen an sie stellen. Beim Benchmarking konnte ich etwa 40 Anfragen pro Sekunde erhalten http://journal.streamlister.com/news/
.
Es könnte wahrscheinlich schneller sein, aber Sie verwenden einen VPS, bei dem Sie CPU und Festplatten-E/A mit anderen teilen.
Antwort3
Ich muss gekkz zustimmen, dass es an Ihrem VPS liegen könnte. Ich habe gerade einen AB-Test an einer meiner statischen Dateien durchgeführt und Folgendes erhalten:
Insgesamt übertragen: 11203000 Bytes
Übertragenes HTML: 10861000 Bytes
Anfragen pro Sekunde: 674,14[#/sec] (Mittelwert)
Zeit pro Anfrage: 14,834 [ms] (Mittelwert)
Zeit pro Anfrage: 1,483 [ms] (Mittelwert, über alle gleichzeitigen Anfragen)
Übertragungsrate: 7375,39 [Kbytes/sec] empfangen
das war eine CSS-Datei. Ich bin auch auf einem VPS von linode.com. Ein aktueller Blog-Beitrag von ihnen zeigteinige Testsauf verschiedenen VPSs durchgeführt, die von Interesse sein könnten.
Ich habe gerade nachgeschaut und meine Konfigurationsdatei ist nur ein wenig anders. Ich habe 2 Prozesse eingerichtet, 1024 Verbindungen und Keep_Alive aktiviert.
Antwort4
Ich glaube, Ihre Testparameter sind das Problem. Bei einer maximalen Parallelität von 10, aber einer Gesamtlieferzeit von ca. 500 ms für jede Seite werden Sie höchstens etwa 20 Anfragen pro Sekunde sehen.
Haben Sie mit ab mit höheren Parallelitätsstufen getestet? (Beachten Sie, dass ab ein sehr einfaches Tool zum Lasttest einer Webanwendung ist und eigentlich nur als „Mikrobenchmark“ betrachtet werden kann.) Sie sollten natürlich auch von einer anderen Maschine aus Benchmarking durchführen, vielleicht von mehreren anderen Maschinen, wenn Bandbreite oder Speicher ein Problem darstellen.