Django Channels + Apache + Docker のパフォーマンスが 10rq/s で止まる

Django Channels + Apache + Docker のパフォーマンスが 10rq/s で止まる

設定

Ubuntu 20.04 OVH VPS (8vCore、16Go RAM) サーバーの docker コンテナ内に Django チャネルを設定しました。django-channels を実行するために daphne を使用しました。バージョン:

Django==3.1.4
channels==3.0.2
daphne==3.0.1

Daphne-Apache のイメージ、Mysql のイメージ、Redis のイメージを使用して Docker-compose を使用しました。

問題

私はLocustを使ってアプリケーションの負荷パフォーマンスをチェックしました。10rq/sを超えると、サーバーはHTTP 応答時間非常に大きくなり(> 10 秒)、アプリケーションが使用できなくなります。

ボトルネックはどこにありますか? パフォーマンスを向上させるにはどうすればよいですか?

追加情報

  • 注 1: SQL クエリを 1 ページあたり約 5 個と非常に少ない数に減らしました。
  • 注 2: VPS 情報ページでは、CPU、メモリ、帯域幅がまったく使用されていません。
  • 注 3: Apache Alias を使用して静的ファイルを提供していますが、アプリケーションが過負荷になると、静的ファイルでも読み込みに時間がかかります。
  • 注4: 負荷が大きすぎる場合に表示されるエラーConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))

私は検索して、複数のプロセスを使用することを発見しました監督されたまたはクベネフィット役に立つかもしれません。しかし、それに進化する前に、すべてが正常であることを確認したいのです。

プロジェクト ファイル docker-compose.yml、routing.py、settings.py を共有できますが、現時点では役に立たないようです。

答え1

ありがとう、ここにコマンドの出力があります

A) Dockerを実行しているルート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) 「uptime」のようなグローバルステータスを表示します。

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 544   |
+---------------+-------+

関連情報