Skip to main content
 首页 » 编程设计

python之Lighttpd + fastcgi + python (for django) 在第一次请求时变慢

2025年05月04日29zlslch

我在使用 lighttpd + fastcgi 托管的 django 网站时遇到问题。 它工作得很好,但似乎第一个请求总是最多需要 3 秒。后续请求要快得多 (<1s)。

我在 lighttpd 中激活了访问日志以跟踪问题。但我有点卡住了。

这是我“丢失”4 的日志(从 10:04:17 到 10:04:21):

2012-12-01 10:04:17: (mod_fastcgi.c.3636) handling it in mod_fastcgi  
2012-12-01 10:04:17: (response.c.470) -- before doc_root  
2012-12-01 10:04:17: (response.c.471) Doc-Root     : /var/www  
2012-12-01 10:04:17: (response.c.472) Rel-Path     : /finderauto.fcgi  
2012-12-01 10:04:17: (response.c.473) Path         :   
2012-12-01 10:04:17: (response.c.521) -- after doc_root  
2012-12-01 10:04:17: (response.c.522) Doc-Root     : /var/www  
2012-12-01 10:04:17: (response.c.523) Rel-Path     : /finderauto.fcgi  
2012-12-01 10:04:17: (response.c.524) Path         : /var/www/finderauto.fcgi  
2012-12-01 10:04:17: (response.c.541) -- logical -> physical  
2012-12-01 10:04:17: (response.c.542) Doc-Root     : /var/www  
2012-12-01 10:04:17: (response.c.543) Rel-Path     : /finderauto.fcgi  
2012-12-01 10:04:17: (response.c.544) Path         : /var/www/finderauto.fcgi  
2012-12-01 10:04:21: (response.c.128) Response-Header:  
HTTP/1.1 200 OK 
Last-Modified: Sat, 01 Dec 2012 09:04:21 GMT 
Expires: Sat, 01 Dec 2012 09:14:21 GMT 
Content-Type: text/html; charset=utf-8 
Cache-Control: max-age=600 
Transfer-Encoding: chunked 
Date: Sat, 01 Dec 2012 09:04:21 GMT 
Server: lighttpd/1.4.28 

我想如果有问题,那是我的配置问题。所以这是我启动 Django 应用程序的方式:

python manage.py runfcgi method=threaded host=127.0.0.1 port=3033 

这是我的 lighttpd 配置:

    server.modules = ( 
    "mod_access", 
    "mod_alias", 
    "mod_compress", 
    "mod_redirect", 
        "mod_rewrite", 
        "mod_fastcgi", 
        "mod_accesslog", 
) 
 
server.document-root        = "/var/www" 
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" ) 
server.errorlog             = "/var/log/lighttpd/error.log" 
server.pid-file             = "/var/run/lighttpd.pid" 
server.username             = "www-data" 
server.groupname            = "www-data" 
accesslog.filename           = "/var/log/lighttpd/access.log"  
 
debug.log-request-header = "enable" 
debug.log-response-header = "enable" 
debug.log-file-not-found = "enable" 
debug.log-request-handling = "enable" 
debug.log-timeouts = "enable" 
debug.log-ssl-noise = "enable" 
debug.log-condition-cache-handling = "enable" 
debug.log-condition-handling = "enable" 
 
 
 
fastcgi.server = ( 
    "/finderauto.fcgi" => ( 
        "main" => ( 
            # Use host / port instead of socket for TCP fastcgi 
            "host" => "127.0.0.1", 
            "port" => 3033, 
            #"socket" => "/home/finderadmin/finderauto.sock", 
            "check-local" => "disable", 
            "fix-root-scriptname" => "enable", 
        ) 
    ), 
) 
alias.url = ( 
    "/media" => "/home/user/django/contrib/admin/media/", 
) 
 
url.rewrite-once = ( 
    "^(/media.*)$" => "$1", 
    "^/favicon\.ico$" => "/media/favicon.ico", 
    "^(/.*)$" => "/finderauto.fcgi$1", 
) 
 
index-file.names            = ( "index.php", "index.html", 
                                "index.htm", "default.htm", 
                               " index.lighttpd.html" ) 
 
url.access-deny             = ( "~", ".inc" ) 
 
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) 
 
## Use ipv6 if available 
#include_shell "/usr/share/lighttpd/use-ipv6.pl" 
 
dir-listing.encoding        = "utf-8" 
server.dir-listing          = "enable" 
 
compress.cache-dir          = "/var/cache/lighttpd/compress/" 
compress.filetype           = ( "application/x-javascript", "text/css", "text/html", "text/plain" ) 
 
include_shell "/usr/share/lighttpd/create-mime.assign.pl" 
include_shell "/usr/share/lighttpd/include-conf-enabled.pl" 

如果你们中的任何人能帮我找出我丢失这 3 或 4 的地方。我将不胜感激。

更新:更多信息。我激活了 fastcgi 日志,我得到了以下两个 fcgi 日志之间的 3s 延迟:

2012-12-01 18:18:12: (mod_fastcgi.c.3636) handling it in mod_fastcgi  
2012-12-01 18:18:12: (response.c.470) -- before doc_root  
2012-12-01 18:18:12: (response.c.471) Doc-Root     : /var/www  
2012-12-01 18:18:12: (response.c.472) Rel-Path     : /finderauto.fcgi  
2012-12-01 18:18:12: (response.c.473) Path         :   
2012-12-01 18:18:12: (response.c.521) -- after doc_root  
2012-12-01 18:18:12: (response.c.522) Doc-Root     : /var/www  
2012-12-01 18:18:12: (response.c.523) Rel-Path     : /finderauto.fcgi  
2012-12-01 18:18:12: (response.c.524) Path         : /var/www/finderauto.fcgi  
2012-12-01 18:18:12: (response.c.541) -- logical -> physical  
2012-12-01 18:18:12: (response.c.542) Doc-Root     : /var/www  
2012-12-01 18:18:12: (response.c.543) Rel-Path     : /finderauto.fcgi  
2012-12-01 18:18:12: (response.c.544) Path         : /var/www/finderauto.fcgi  
2012-12-01 18:18:12: (mod_fastcgi.c.3061) got proc: pid: 0 socket: tcp:127.0.0.1:3033 load: 1  

也许它与 fastcgi 配置有关?

提前致谢!

请您参考如下方法:

您的网站上可能没有太多事件吗?我认为 python 解释器在下一个请求之前从内存中删除。您是否有足够的 RAM 来将所有软件保存在内存中?是否有其他正在运行的任务可能会将 python 推出内存 - 也许只是维护或邮件服务器?