Aufstellen
Ich habe Django-Kanäle in einem Docker-Container auf dem Server Ubuntu 20.04 OVH VPS (8vCore, 16Go RAM) konfiguriert. Zum Ausführen von Django-Kanälen habe ich Daphne verwendet. Versionen:
Django==3.1.4
channels==3.0.2
daphne==3.0.1
Ich habe Docker-Compose mit einem Image für Daphne-Apache, einem Image für Mysql und einem Image für Redis verwendet.
Ausgabe
Ich habe Locust verwendet, um die Ladeleistung der Anwendung zu überprüfen. Wenn ich mehr als 10rq/s habe, der ServerHTTP-Antwortzeitwird riesig (> 10 Sek.) und die Anwendung ist nicht mehr verfügbar.
Wo liegt der Engpass? Was könnte die Leistung verbessern?
Zusatzinformation
- Hinweis 1: Ich habe die Anzahl der SQL-Abfragen auf eine sehr geringe Anzahl reduziert, etwa 5 pro Seite.
- Hinweis 2: Auf der VPS-Infoseite werden CPU, Speicher und Bandbreite überhaupt nicht vollständig genutzt.
- Hinweis 3: Ich stelle statische Dateien mit Apache Alias bereit, aber wenn die Anwendung überlastet ist, dauert das Laden selbst statischer Dateien eine Weile.
- Hinweis 4: Der Fehler, den ich bekomme, wenn die Last zu hoch ist
ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
Ich habe gesucht und herausgefunden, mit Hilfe von Multiples-Prozess mitbeaufsichtigtoderKuberneteskönnte helfen. Aber ich möchte sicher sein, dass alles normal ist, bevor ich mich dahin entwickle.
Ich kann die Projektdateien docker-compose.yml, routing.py und settings.py freigeben, aber das scheint mir im Moment nicht hilfreich zu sein.
Antwort1
Danke, hier die Befehlsausgabe
A) In das Root-Ubuntu mit Docker gestartet: ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62405
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 62405
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
B) In den MySQL-Container ausgeführt: SHOW GLOBAL STATUS LIKE '%open%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Com_ha_open | 0 |
| Com_show_open_tables | 0 |
| Innodb_num_open_files | 29 |
| Open_files | 14 |
| Open_streams | 0 |
| Open_table_definitions | 113 |
| Open_tables | 114 |
| Opened_files | 149 |
| Opened_table_definitions | 113 |
| Opened_tables | 121 |
| Slave_open_temp_tables | 0 |
| Table_open_cache_hits | 25 |
| Table_open_cache_misses | 121 |
| Table_open_cache_overflows | 0 |
+----------------------------+-------+
C) GLOBALE VARIABLEN WIE „%open%“ ANZEIGEN;
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| have_openssl | YES |
| innodb_open_files | 2000 |
| open_files_limit | 1048576 |
| table_open_cache | 2000 |
| table_open_cache_instances | 16 |
+----------------------------+---------+
D) GLOBALEN STATUS WIE „%dirty%“ ANZEIGEN;
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_bytes_dirty | 0 |
+--------------------------------+-------+
E) GLOBALEN STATUS WIE „Betriebszeit“ ANZEIGEN;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 544 |
+---------------+-------+