私のDjangoアプリケーションの多くのビューは、出力を計算するために大きなモデル(900Mb)を使用します。このモデルを一度ロードして、すべてのビューと共有したいと思います。私がやったやり方は、views.py
にモデルをロードして、モデルをグローバル変数として使用することでした。Djangoはすべてのリクエストでより多くのメモリを占める
with open('big_model.pkl','rb') as f:
model = pickle.load(f)
def view1(request):
out = model.compute(request)
...
def view2(request):
out = model.compute(request)
...
私はDjangoアプリケーションをAWS beanstalkにデプロイしました。私は私のアプリを実行しているインスタンス上でtop
を実行する場合、私は1つの要求した後、次を参照してください。
Mem: 4048016k total, 2807496k used, 1240520k free, 3660k buffers
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11530 wsgi 20 0 2817m 1.6g 30m S 0.0 41.9 0:04.63 httpd
を、第2の要求した後、別のプロセスが表示され、1GBのメモリを占有してしまいました。
Mem: 4048016k total, 3941208k used, 106808k free, 2192k buffers
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11530 wsgi 20 0 2817m 1.6g 29m S 0.0 41.9 0:04.63 httpd
11532 wsgi 20 0 2817m 1.6g 29m S 0.0 41.9 0:04.32 httpd
これはローカルマシンでは発生しません。何か案は?