web-dev-qa-db-ja.com

Apache Django 4GBのサーバー上のOOM RAM

私は4GBのRAMを搭載したUbuntuLinodeで本番サイトDjangoサイトを実行しています。主要なプロセスはApache2、MongoDB、Memcache、PostgreSQL、Tomcat6、Redisです。ApacheOOMは1日に約10回です。 Apache2.confの値を何度も微調整しましたが、効果は見られませんでした。リクエストの数とメモリスパイク、またはリクエストとメモリスパイクのパスの間に明らかな相関関係はありません。通常、Apacheはメモリをほとんど消費しないため、「スパイク」と言います。 1秒で3.5GBにジャンプし、カーネルによって強制終了されます。JMeter(負荷テストソフトウェア)を使用してスパイクを人為的にトリガーすることはできませんでした。通常、負荷時のメモリ消費量は非常に少なく、安定しています。

メモリ使用量の24時間グラフ(Linode Longviewから): http://i.imgur.com/ysIYe8l.png

また、メモリ使用量もゆっくりと増加しているようです。

Syslogから:

kernel: Apache2 invoked oom-killer:
...
kernel: 11705 total pagecache pages
kernel: 5472 pages in swap cache
kernel: Swap cache stats: add 76719087, delete 76713615, find 92563708/94246314
kernel: Free swap  = 0kB
kernel: Total swap = 2097148kB
kernel: 1050623 pages RAM
kernel: 43278 pages reserved
kernel: 788996 pages shared
kernel: 999768 pages non-shared
...
kernel: [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
kernel: [ 3709]  1000  3709  3706586   889237    7117   464598             0 Apache2
...
kernel: Killed process 3709 (Apache2) total-vm:14826344kB

現在のApache2.conf:

Timeout 30
KeepAlive Off

<IfModule mpm_prefork_module>
    StartServers 3
    MinSpareServers 2
    MaxSpareServers 5
    MaxClients 10
    MaxRequestsPerChild 1000
</IfModule>

Nginxへの切り替えはオプションではありません。ほとんどの場合、OOMはシステムを強制終了しませんが、数週間ごとに強制終了し、サーバーを再起動する必要があります。 A:これは何が原因でしょうか? B:真の原因を診断するためにまだ行っていない手順は何ですか?

1
protonpopsicle

Djangoアプリを実行していますか?それはそのうちの1つです。

わからない正確にどのように設定したかPython/DjangoランタイムがApacheとメモリスペースを共有するように設定したことを賭けています。メモリ使用量はここで混乱しています。

1
MikeyB