1

要するに、私の質問は、リクエストに時間がかかり、その理由を見つけることができないということです。なぜそんなに時間がかかるのかを理解するためにできることは他にありません。リクエスト時間を短縮するために見落としている可能性のある他のテクニックは何ですか?

このシナリオ全体で、かなり長い間頭を悩ませてきました。テストサーバーを仮想ボックスとして作成し、サーバーに vagrant をロードしました。virtualbox のホスト マシンから Apache/Django Web サイトにアクセスしようとすると、リクエストに平均 6 秒かかります。mod_wsgi は初回の読み込みに時間がかかるはずだったが、その後のアクセスでも読み込みに約 6 秒かかると読みました。

これはDjangoツールバーからの出力です

Resource    Value
User CPU time   183.972 msec
System CPU time     606.908 msec
Total CPU time  790.880 msec
Elapsed time    5720.771 msec
Context switches    12800 voluntary, 21 involuntary

ご覧のとおり、経過時間は非常に長く、合計 CPU 時間は約 1 分です。数が多いのが少し気になりContext switchesます。とにかく、次に次のコマンドでApacheのプロファイルを作成しようとしました

$ ab -n 400 http://127.0.0.1:8080/scheduling/instruments
...
Time taken for tests:   5.389 seconds
Complete requests:      400
...
Time per request:       13.473 [ms] (mean)

ブラウザが 1 つを完了するのにかかる時間内に 400 のリクエストを完了することができたので、これは私には意味がありません。ブラウザでまったく同じリクエストを行うと、通常は 6 秒かかりました。私の最後の唯一の考えは、mod_wsgiがdjangoを起動してそこからリクエストを処理するのに、リクエストが何らかの形で5秒かかっているに違いないということです。httpd.conf以下は、私のファイルの関連セクションとdjango.wsgi、アプリケーションを提供するために使用された私のファイルです

# Use apache to serve the static media files
AliasMatch ^/([^/]+)/media/(.*) /var/www/apps/$1/media/$2

<DirectoryMatch ^/var/www/apps/([^/]+)/media>
Order deny,allow
Allow from all
</DirectoryMatch>

WSGIDaemonProcess django_apps user=apache group=root
WSGIProcessGroup django_apps
WSGISocketPrefix /var/run/wsgi
WSGIScriptAliasMatch ^/([^/]+) /var/www/apps/$1/django.wsgi

そして django.wsgi Apache が読み込まれます

import os
import sys

path = '/var/www/apps'
path2 = '/var/www/apps/scheduling'
path3 = '/var/www/apps/scheduling/debug_toolbar'
if path not in sys.path:
    sys.path.append(path)
if path2 not in sys.path:
    sys.path.append(path2)
if path3 not in sys.path:
    sys.path.append(path3)

os.environ['DJANGO_SETTINGS_MODULE'] = 'scheduling.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

import scheduling.monitor
scheduling.monitor.start(interval=1.0)

Scheduling.monitor は、この Web サイトからそのままコピーされますソース コードのリロード

それが役立つ場合、サーバーは、すべてのポート転送が適切にセットアップされた、ローカルの Mac Lion でホストされている VirtualBox です。サーバーはCentos 6で、デフォルトでApache 2.2とDjango 1.3.1がインストールされています


編集:問題はVM上にあったことが判明しました。VM はローカル マシンを DNS として使用するように構成されていたため、マシン内からの DNS ルックアップに 5 秒以上かかる場合がありました。つまり、マシンが別のサーバーに接続しようとすると (つまり、SQL サーバーを検索すると)、mod_wsgi がリクエストを取得してから、私の python ビューがリクエストを受信するまでの間、偶然にもフリーズしていました。値を/etc/resolv.confローカル DNS に変更すると、問題が解決しました。

4

0 に答える 0