设置
我已经在服务器 Ubuntu 20.04 OVH VPS(8vCore,16Go RAM)上的 docker 容器内配置了 Django Channels。为了运行 django-channels,我使用了 daphne。版本:
Django==3.1.4
channels==3.0.2
daphne==3.0.1
我使用了 Docker-compose,其中包含一个 Daphne-Apache 镜像、一个 Mysql 镜像和一个 Redis 镜像。
问题
我使用 Locust 检查了应用程序的负载性能。当我有超过 10rq/s 时,服务器HTTP 响应时间变得巨大(> 10 秒)并且应用程序变得不可用。
瓶颈在哪里?如何提高性能?
额外信息
- 注 1:我已将 SQL 查询数量减少到非常少,每页大约 5 个。
- 注2:在VPS信息页面上,CPU,Mem,带宽根本没有得到充分利用。
- 注 3:我使用 Apache Alias 提供静态文件,但是当应用程序过载时,即使是静态文件也需要时间才能加载。
- 注 4:负载过大时出现的错误
ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
我搜索并发现使用多个进程主管或者Kubernetes可能会有帮助。但在发展到那种程度之前,我想确保一切正常。
我可以共享项目文件 docker-compose.yml、routing.py、settings.py,但目前对我来说似乎没有帮助。
答案1
谢谢,这里是命令输出
A)运行 Docker 的 root ubuntu: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) 运行到mysql容器中: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) 显示全局变量如'%open%';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| have_openssl | YES |
| innodb_open_files | 2000 |
| open_files_limit | 1048576 |
| table_open_cache | 2000 |
| table_open_cache_instances | 16 |
+----------------------------+---------+
D)显示全局状态如'%dirty%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_bytes_dirty | 0 |
+--------------------------------+-------+
E) 显示全局状态,如‘正常运行时间’;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 544 |
+---------------+-------+