代码之家  ›  专栏  ›  技术社区  ›  Trausti Thor

nginx设置问题

  •  8
  • Trausti Thor  · 技术社区  · 17 年前

    我知道这不是一个直接的编程问题,但是stackoverflow上的人似乎能够回答任何问题。

    我有一个运行CentOS 5.2 64位的服务器。非常强大的双核2服务器,4GB内存。它主要提供静态文件、flash和图片。当我使用lighttpd时,它的速度很容易超过80mb/秒,但当我使用nginx进行测试时,它的速度会下降到小于20mb/秒。

    我的设置非常直接,使用默认的设置文件,我添加了以下内容

    user  lighttpd;
    worker_processes  8;
    worker_rlimit_nofile 206011;
    #worker_rlimit_nofile 110240;
    
    error_log   /var/log/nginx/error.log;
    #error_log  /var/log/nginx/error.log  notice;
    #error_log  /var/log/nginx/error.log  info;
    
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  4096;
    }
    
    http {
    ....
    
    keepalive_timeout  2;
    ....
    }
    

    我认为nginx至少应该是强大的,所以我一定没有做什么。

    3 回复  |  直到 17 年前
        1
  •  6
  •   Dave Cheney    17 年前

    当您重新加载nginx(kiil-hup)时,您将在错误日志中得到类似的信息

    2008/10/01 03:57:26 [notice] 4563#0: signal 1 (SIGHUP) received, reconfiguring
    2008/10/01 03:57:26 [notice] 4563#0: reconfiguring
    2008/10/01 03:57:26 [notice] 4563#0: using the "epoll" event method
    2008/10/01 03:57:26 [notice] 4563#0: start worker processes
    2008/10/01 03:57:26 [notice] 4563#0: start worker process 3870
    

    您的nginx编译使用什么事件方法?

    你在访问日志吗?考虑添加buffer=32k,这将减少对日志文件的写锁的争用。

    考虑减少workers的数量,这听起来有违直觉,但是对于accept()这样的sys调用,workers需要彼此同步。尽量减少工人的数量,理想情况下我建议1个。

    您可以尝试在侦听套接字上显式设置读写套接字缓冲区,请参见 http://wiki.codemongers.com/NginxHttpCoreModule#listen

        2
  •  3
  •   Ross    17 年前

    也许lighttpd正在使用某种缓存?有一篇很棒的文章 here 这描述了如何使用nginx设置memcached以获得400%的性能提升。

    memcached模块上的nginx文档是 here .

        3
  •  1
  •   Seun Osewa    17 年前

    建议: -每个处理器使用一个工作线程。 -检查各种nginx缓冲设置