我遇到的问题
我遇到了一个问题,即某些站点需要很长时间才能加载(“长时间”是指最多16秒)。有时它们可能会完全超时,从而产生Nginx 504错误。通常,当站点超时时,我可以再次重新加载该站点,并且它将很快加载。我遇到问题的网站的流量很小。我正在通过加载Django admin索引页面来测试站点,以尝试消除由于代码差而导致的运行缓慢。还应注意,此特定站点仅使用Django admin,因为它是仅供员工使用的Intranet类型站点。
托管设置
我托管的所有站点都在两个Rackspace云服务器上。第一个服务器是我的应用程序服务器,它具有1024 MB的RAM,第二个服务器是我的数据库服务器,它具有2048 MB的RAM。应用服务器使用Nginx为每个站点提供服务,Nginx提供所有静态文件,并将其他所有内容代理给每个站点的Django Gunicorn工作人员。
当查看数据库服务器的RAM和CPU负载时,似乎数据库服务器上的一切都很好。
$ free -m
total used free shared buffers cached
Mem: 1999 1597 402 0 200 1007
-/+ buffers/cache: 389 1610
Swap: 4094 0 4094
Top shows a CPU load average of: 0.00, 0.01, 0.05
为了尝试对发生的问题进行故障排除,我编写了一个简短的script,它打印出应用服务器上的内存使用情况。
带有匿名站点域的示例打印:
Celery: 23 MB
Gunicorn: 566 MB
Nginx: 8 MB
Redis: 684 KB
Other: 73 MB
total used free shared buffers cached
Mem: 993 906 87 0 19 62
-/+ buffers/cache: 824 169
Swap: 2047 828 1218
Gunicorn memory usage by webste:
site01.example.com 31 MB
site02.example.com 19 MB
site03.example.com 7 MB
site04.example.com 9 MB
site05.example.com 47 MB
site06.example.com 25 MB
site07.example.com 14 MB
site08.example.com 18 MB
site09.example.com 27 MB
site10.example.com 15 MB
site11.example.com 14 MB
site12.example.com 7 MB
site13.example.com 18 MB
site14.example.com 18 MB
site15.example.com 10 MB
site16.example.com 25 MB
site17.example.com 13 MB
site18.example.com 18 MB
site19.example.com 37 MB
site20.example.com 30 MB
site21.example.com 23 MB
site22.example.com 28 MB
site23.example.com 80 MB
site24.example.com 15 MB
site25.example.com 5 MB
示例Gunicorn配置文件:
pidfile = '/var/run/gunicorn_example.com.pid'
proc_name = 'example.com'
workers = 1
bind = 'unix:/tmp/gunicorn_example.com.sock'
Nginx配置示例:
upstream example_app_server {
server unix:/tmp/gunicorn_example.com.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location = /favicon.ico {
return 404;
}
location /static/ {
root /srv/sites/example/;
}
location /media/ {
root /srv/sites/example/;
}
location / {
proxy_pass http://example_app_server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}
}
如您所见,有很多内存可以交换,因此为了解决我的问题,我在应用服务器上升级了ram,这完全解决了网站的运行速度问题。即使我能够解决此问题,但花费的时间比我想要的要长得多,而且我仍然觉得我基本上是在猜测造成网站运行缓慢的原因。所有这些使我想到了问题...
问题
最佳答案
只有1GB RAM的服务器上可以托管许多站点。您的内存利用率接近100%,您拥有的数字可能是“备用”数字。每个进程的RAM使用情况可以并且将在服务请求的过程中迅速增加。马上,您需要为该实例添加更多的RAM,更好的是,将某些站点移到另一台服务器上。
关于您的问题:
关于django - 解决Nginx + Gunicorn + Django堆栈上的网站缓慢问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401513/