nginx设置问题

8

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

我有一台运行Centos 5.2 64位的服务器。这是一台性能很强的双核2服务器,拥有4GB内存。它主要用于提供静态文件、Flash和图片。当我使用lighttpd时,它轻松地提供超过80 MB/sec的速度,但是当我使用nginx进行测试时,速度下降到不到20 MB/sec。

我的设置非常简单,使用默认的设置文件,并添加了以下内容:

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至少和其他服务器一样强大,所以我肯定是做错了什么。


你的lighttpd配置是什么样子的?比较一下可能会很有趣。由于lighttpd是单线程的,但你的机器有双核处理器 - 你是启动两个lighttpd还是用单个实例处理80mb/s的负载? - Till
你能概述一下你的测试方法吗?这可能会有所帮助。 - Jauder Ho
这是一个非常活跃的Web服务器,只处理静态文件。在CentOS 5盒子上使用yum安装了lighttpd和nginx。从那里开始相当直截了当。所有内容都由munin监控,并在负载均衡器上进行活动会话。拥有nginx的盒子承担了lighty的50%。 - Trausti Thor
3个回答

7
当您重新加载nginx(kiil -HUP)时,您的错误日志中会出现以下内容:
2008/10/01 03:57:26 [notice] 4563#0: 收到信号1(SIGHUP),正在重新配置
2008/10/01 03:57:26 [notice] 4563#0: 重新配置
2008/10/01 03:57:26 [notice] 4563#0: 使用“epoll”事件方法
2008/10/01 03:57:26 [notice] 4563#0: 启动工作进程
2008/10/01 03:57:26 [notice] 4563#0: 启动工作进程3870
您的nginx编译使用了哪种事件方法?
您是否正在进行任何访问日志记录?考虑添加buffer=32k,这将减少日志文件写入锁的争用。
考虑减少工作进程的数量,这听起来有些反直觉,但是工作进程需要相互同步以进行像accept()这样的系统调用。尝试减少工作进程的数量,理想情况下建议为1个。
你可以尝试在监听套接字上明确设置读写套接字缓冲区,请参考http://wiki.codemongers.com/NginxHttpCoreModule#listen

3
也许lighttpd正在使用某种缓存?这里有一篇很棒的文章在这里,介绍了如何为nginx设置memcached,据报道可以提高400%的性能。
关于memcached模块,nginx文档在这里

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接