Django Deployment: Cutting Apache's Overhead

前端 未结 4 938
花落未央
花落未央 2020-12-23 23:41

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.<

相关标签:
4条回答
  • 2020-12-24 00:08

    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.
    0 讨论(0)
  • 2020-12-24 00:11

    You might consider using Spawning for deployment.

    0 讨论(0)
  • 2020-12-24 00:12

    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.
    0 讨论(0)
  • 2020-12-24 00:18

    you could run Django on FastCGI. nginx could then drive it directly instead of going through Apache.

    0 讨论(0)
提交回复
热议问题