Articles of django

加快django服务器

我的设置是django 1.3和ubuntu 10.04的默认mod_wsgi和apache包。 我在我的开发虚拟机(DEBUG和debugging工具栏closures)上testing了我的应用程序的一个视图: ab -n 200 -c 5 http://127.0.0.1/ 每秒获得4个请求。 这似乎很慢,所以我简化了查询,使用索引等debugging工具栏告诉我,我有4个查询8ms。 运行同样的testing,我只能得到每秒8个请求。 CPU似乎一直在100%。 这对于现在非常简单的视图来说似乎相当缓慢,但它只是一个低功耗的虚拟机。 我决定启动一个大型的ec2实例(4个cpu),看看在这个机器类上我会得到怎样的性能,而且每秒只能得到13个请求, 我怎样才能改变apache / mod_wsgi的configuration,以获得更多的这个类的机器性能? 我想我正在使用工人而不是prefork: $ /usr/sbin/apache2 -l Compiled in modules: core.c mod_log_config.c mod_logio.c worker.c http_core.c mod_so.c 我的工作人员configuration是: <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> 和我的WSGI设置如下所示: WSGIScriptAlias / /home/blah/site/proj/wsgi.py WSGIDaemonProcess […]

如何用Django 1.3设置SysLogHandler

我没有find任何有关使用Django 1.3字典configuration设置系统日志logging的信息。 Django文档不包括syslog,python文档不太清楚,根本不包括字典configuration。 我已经开始了以下,但我坚持如何configurationSysLogHandler。 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'syslog':{ 'level':'DEBUG', 'class':'logging.handlers.SysLogHandler', 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers':['syslog'], 'propagate': True, 'level':'INFO', }, 'myapp': { 'handlers': ['syslog'], 'propagate': True, 'level': […]

使用unicode文件名重新上传文件会创build相同的副本

我正在Debian 6系统上运行一个Django站点,使用gunicorn服务器和处理静态文件的nginx 0.7.67。 文件系统区域设置为sv_SE.UTF-8。 我遇到了另一个用户上传包含unicode字符的文件名的问题。 这导致服务器在尝试提供上传的文件时抛出404错误。 当我从我的系统上传相同的文件时,该站点现在正确地提供该文件。 但是,它并没有删除旧文件,尽pipe它们在各方面似乎完全相同。 以下是当前目录列表。 -rwxr-xr-x 1 www-data www-data 1188260 25 jan 22.53 Läxa 15_geometri.pdf -rwxr-xr-x 1 www-data www-data 1188260 27 jan 10.45 Läxa 15_geometri.pdf 现在怎么可能有两个相同的文件具有相同的(明显的)名称? 首先可能是404的原因,即第一次上传有什么问题? URL和以前一样,只是现在不会抛出404。

Apache与Nginx的前端采取挂钩与Django应用程序100%的CPU

我最近推出了一个Web应用程序,不断与100%的CPU挂钩。 我的服务器是一个512 MB的Linode,nginx坐在Apache(MPM Worker)前面,为Django应用程序提供服务。 这个应用程序是不寻常的,它必须做大量的数据库处理<5%的时间(约2-5K查询/请求)。 我目前只有less量的用户(一天50个,在任何时候约5-10个)。 现在我明白做了几千个查询是顶部,我正在寻求优化,但我不明白为什么Apache进程去100%,并留在那里,即使没有人正在访问重载页面。 这是我的Apacheconfiguration的一部分: <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> 这是我从“顶部”的前几行: 10257 www-data 20 0 370m 143m 4052 S 100 29.0 16:19.47 apache2 1 root 20 0 2728 224 24 S 0 0.0 0:01.34 init 2 root 20 0 0 […]

应用程序报告超时。 然而nginx没有logging或日志

我们通过nginx / uwsgi服务于Django。 我们在VPC后面使用AWS ELB。 这是移动客户端的web服务。 我们在开发过程中报告了超时,所以我们为每个请求添加了一个request_id的概念 客户端生成请求标识 发送GET / request?_request_id = ABDFEFE 如果发生错误,则将错误与请求ID一起报告给服务器 我现在遇到的问题是我得到了在野外发生的超时错误报告。 但是,相关的request_id不会显示在任何nginx或uwsgi日志中。 我有点怀疑亚马逊弹性负载平衡器。 但是我不能确定。 由于这是一个超时我们没有ELB标题看,或状态码或响应身体或任何东西。 我们使用newrelic来监视我们的后端。 偶尔会logging3-4秒的“慢速交易”。 (没有像大多数客户端库中典型的30秒超时) 实际的问题:下一步看什么? 根据我和我在服务器上的数据,NOTHING实际上是错误的,但超时仍然存在。 在这一点上,我甚至不知道如何开始debugging。 应用程序服务器运行在10%的容量(对于mem和cpu)缓慢的sql查询正在被logging(没有什么有趣的) (我也在分别查看客户端错误) 提前致谢。

压力testingDjango应用程序 – 如何提高吞吐量?

我第一次尝试压力testing一个简单的django web应用程序,运行在gunicorn和nginx上,我把它放在一个小型的256MB Rackspace Cloud服务器上。 使用httperf,我增加每秒的连接数,直到我开始得到错误例如 httperf –hog –server=localhost –uri=/myapp –timeout=10 –num-conns=2500 –rate=25 我发现,从Django几乎静态页面,我可以得到约35 req /秒之前,错误开始被抛出。 对于需要数据库查询和更多处理的更加dynamic的页面,我可以获得大约25次/秒。 最初我只使用1个gunicorn worker,但增加到4个worker(我认为我的云服务器有4个内核)似乎没有任何区别(它仍然开始抛出25 req / sec以上的错误)。 这些结果听起来像预期的一样,考虑到这是一个如此小(256MB)的服务器上运行? 另外,是否有任何改变,我可以提高吞吐量?

Nginx> Varnish> Gunicorn Error太多的redirect

我有以下configuration: Nginx>清漆> Gunicorn> Django 我想caching与同一个网站(移动和networking)的2个版本与清漆。 Gunicorn: WEB: gunicorn_django –bind 127.0.0.1:8181 MOBILE: gunicorn_django –bind 127.0.0.1:8182 Nginx的: WEB: server { listen 80; server_name www.mysite.com; location / { proxy_pass http://127.0.0.1:8282; # pass to Varnish proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 移动: server { listen 80; server_name m.mysite.com; location / { proxy_pass http://127.0.0.1:8282; # […]

Supervisord无法closuresfcgi进程

我设法在我的django项目上设置了fastcgi,问题是当我让mi程序停止时,服务器继续以某种方式运行,并且我的页面保持在线。 这是我的supervisord程序指令: [program:helloworld] command=/var/www/django-projects/helloworld/run 这是我的“运行”脚本: #!/bin/bash source /var/www/django-projects/helloworld/venv/bin/activate; /var/www/django-projects/helloworld/manage.py runfcgi \ daemonize=false \ host=127.0.0.1 \ port=8000; 所有我想要的是一个方法来停止/启动/使用supervisord重新启动这个django项目,希望你能帮助我。

Nginx / uWSGI – 从上游读取响应头时,上游过早closures连接

我有一个configuration了Nginx和uWSGI的Ubuntu服务器来服务Django,它是昨天设置和使用默认开始页面的。 我所做的一切都是安装MySQL和后来的Pos​​tgreSQL,并将db设置添加到Django中,现在我在uwsgi错误日志中upstream prematurely closed connection while reading response header from upstream错误upstream prematurely closed connection while reading response header from upstream得到一个502网关错误和upstream prematurely closed connection while reading response header from upstream 。 我已经看了一下,我看到有人build议这可以涉及到超时设置,人们已经修复它只是通过重新安装PHP,但我想明白这是什么意思,希望如何解决它。 有人可能为我揭示一些事情吗? 我的uWSGIconfiguration看起来像这样; # config plugins = python master = true protocol = uwsgi env = DJANGO_SETTINGS_MODULE=%(projectname).settings pythonpath = %(base)/src/%(projectname) module = %(projectname).wsgi socket = […]

如何告诉apache在提供旧的修改过的HTML文件之前查找最后修改date?

在某些请求我的Django应用程序更新静态HTML文件。 然而,Apache正在从它的caching中提供旧的副本… 如何configurationApache以确保提供最新的文件更改 这种变化并不是那么频繁,但是由于门户网站用户的改变,我们无法预测这种变化的频率和发生的时间。 如果我们可以configurationApache来检查服务caching副本可能做的最后修改date。