Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Deployment: Cutting Apache's Overhead

I have a small VPS server that has a Nginx front end that serves up static media files and passes Django requests back to an Apache 2.2 prefork MPM server running mod_wsgi.

With one (very) small site loaded and working, it's currently using 143MB of 256MB of RAM.

Using the top command I can see that Apache is using 52.9% of available RAM, with memcache in second using 2.1%.

Considering that I'm planning on putting quite a few Django projects on this one server, I'm wondering if there is anything I can do to trim the amount of RAM that Apache is using?

like image 249
Ty. Avatar asked Jan 28 '09 18:01

Ty.


3 Answers

If you want to stick with Apache, a few suggestions, roughly in order of difficulty:

  • use the Apache worker MPM instead of prefork. Real memory used per client connection will be lower, but be aware that the virtual memory allocated for Apache on Linux can appear very high, due to the 8MB Linux allocates for each thread's stack. This doesn't actually matter, unless your VPS is brain-dead and caps virtual memory rather than actual RSS (resident set size) memory. In that case you can learn how to lower the thread stack size here (under the Memory-constrained VPS section).
  • edit your Apache config file and reduce the StartServers, MaxClients, MinSpareThreads, and MaxSpareThreads settings roughly in proportion. The appropriate levels will be a balance between your desired memory usage and the number of concurrent clients you need to be able to serve.
  • switch to mod_wsgi (in daemon mode) instead of mod_python.
like image 108
Carl Meyer Avatar answered Oct 16 '22 06:10

Carl Meyer


For the record, the OP's use of the term MPM is non sensical. The MPM in Apache isn't an option, you are always using an MPM when using Apache. The choice is which MPM you are using. On UNIX the two main MPMs or Multiprocessing Modules, are prefork and worker. On Windows the winnt MPM is always used. Details about the different MPMs can be found in Apache documentation on Apache web site. In the context of mod_wsgi though, you might be better off reading:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

In short though:

  • prefork MPM is multi process/single threaded.
  • worker MPM is multi process/multi threaded.
  • winnt MPM in single process/multi threaded.
like image 6
Graham Dumpleton Avatar answered Oct 16 '22 06:10

Graham Dumpleton


You might consider using Spawning for deployment.

like image 3
Jeff Bauer Avatar answered Oct 16 '22 05:10

Jeff Bauer