Назад | Перейти на главную страницу

Django mod_wsgi проблема с памятью

У меня есть приложение django на VPS-сервере (128 МБ оперативной памяти). Когда я запускаю его с помощью python manage.py runserver, он работает отлично, но если я попытаюсь использовать его поверх apache / mod_wsgi, это очень скоро вызовет серьезное замедление (после того, как я нажму несколько случайные ссылки на моей веб-странице), и, похоже, не хватает памяти. Это случается даже с приложениями "hello world". Но это довольно странно, поскольку он отлично работает с manage.py runserver. Есть идеи?

/var/log/apache2/error.log
-----------------------------
[Wed Feb 10 00:00:40 2010] [error] [client 65.55.37.202] File does not exist: /var/www/robots.txt
[Wed Feb 10 00:01:22 2010] [error] [client 65.55.37.202] File does not exist: /var/www/file
[Wed Feb 10 00:02:32 2010] [warn] child process 2023 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:32 2010] [warn] child process 1961 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:32 2010] [warn] child process 1994 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:32 2010] [warn] child process 1995 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:32 2010] [warn] child process 1996 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:33 2010] [warn] child process 2023 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:33 2010] [warn] child process 1961 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:33 2010] [warn] child process 1994 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:33 2010] [warn] child process 1995 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:33 2010] [warn] child process 1996 still did not exit, sending a SIGTERM
[Wed Feb 10 00:02:34 2010] [notice] caught SIGTERM, shutting down
[Wed Feb 10 00:15:31 2010] [notice] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
[Wed Feb 10 00:15:31 2010] [notice] mod_python: using mutex_directory /tmp 
[Wed Feb 10 00:15:32 2010] [notice] Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_wsgi/2.3 configured -- resuming normal operations
[Wed Feb 10 00:17:24 2010] [error] [client 202.152.243.143] File does not exist: /var/www/file, referer: http://www.webmaster-tutorial.com/view/919
[Wed Feb 10 00:19:56 2010] [error] [client 202.152.243.143] File does not exist: /var/www/favicon.ico
[Wed Feb 10 00:20:09 2010] [error] [client 202.152.243.143] File does not exist: /var/www/favicon.ico
[Wed Feb 10 00:23:25 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:23:41 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:23:52 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:24:03 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:24:16 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:24:29 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:24:39 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:24:51 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:25:01 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:25:11 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:25:21 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:25:31 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
[Wed Feb 10 00:25:41 2010] [error] (12)Cannot allocate memory: fork: Unable to fork new process
----------------------------------

Убедитесь, что вы не используете встроенный режим. Вместо этого используйте режим демона. Видеть:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

для объяснения того, почему встроенный режим плох для сред с ограниченным объемом памяти.

Кстати, также откажитесь от mod_python и используйте более современный mod_wsgi, в частности mod_wsgi 3.X, и установите:

WSGIRestrictEmbedded On

в дополнение к использованию режима демона для еще большей экономии памяти.