2008-09-24 110 views
8

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

我有一台运行Centos 5.2 64位的服务器。相当强大的双核2服务器,4GB内存。它主要提供静态文件,闪光灯和图片。当我使用lighttpd时,它可以轻松提供超过80 MB /秒的速度,但是当我使用nginx进行测试时,速度会降至20 MB /秒以下。

我的设置是非常简单的,使用默认的安装文件,我已经添加了以下

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的应该是至少强大,所以我一定不能做的事情。

+0

你的lighttpd配置是什么样的?可能比较有趣。此外,由于lighttpd是单线程的,但是你在双核上 - 你是否启动两个lighttpds,或者你是否使用单个实例处理80mb/s? – Till 2008-09-24 14:42:39

回答

3

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

memcached模块上的nginx文档是here

6

当你重装你的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的编译使用?

你在做什么access_log?考虑添加buffer = 32k,这将减少日志文件写入锁的争用。

考虑减少工作人员数量,这听起来违反直觉,但工作人员需要为accept()等sys调用彼此同步。尝试减少工人数量,最好我建议1

你可以尝试明确设置读取和监听套接字上写socket缓存,见http://wiki.codemongers.com/NginxHttpCoreModule#listen

1

建议: - 每个处理器使用1名工人。 - 检查各种nginx缓冲区设置