为服务器大量的静态内容调整Nginx / CentOS

时间:2011-01-29 19:47:40

标签: nginx centos performance iostat

我有一台Linux机器64位(centos5.5),2.83GHz Q9550,6gb内存和一个SATA 500gb驱动器。

从这台机器我只提供缩略图,大小约为10kb,此时服务器上有大约700万缩略图。我把它们设置在/ 25/25/25/25文件夹设置中,这是我推荐的。

平均而言,nginx状态报告显示我正在提供大约300到400个活动连接。

实施例

Active connections: 297 
server accepts handled requests
 1975808 1975808 3457352 
Reading: 39 Writing: 8 Waiting: 250 

现在问题是这台机器非常困难,而且随着我的网站变得更加繁忙而变得越来越慢。负载总是在8到9左右。

我注意到iostat显示超过100%的util。

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20     1.40 99.80 31.14  1221.56   255.49    11.28   114.14  831.81   7.62  99.84

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20     0.60 100.80 24.00  1192.00   203.20    11.18   113.77  775.42   8.02 100.04

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20   314.80 44.80 130.00   598.40  3547.20    23.72   113.76  937.18   5.72 100.02

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     5.40 56.20 110.80   660.80   937.60     9.57   112.37  518.01   5.99 100.04

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.60    12.40 82.80 41.60  1008.00   432.00    11.58   113.66  852.51   8.04 100.04

下面你可以看到我的一些nginx配置设置:

worker_processes  6;
worker_connections  4096;

http {
        include                 mime.types;
        default_type            application/octet-stream;
        #access_log             logs/access.log  main;
        sendfile                on;
        #tcp_nopush             on;
        keepalive_timeout       4;
        gzip                    on;
        gzip_http_version       1.1;
        gzip_vary               on;
        gzip_comp_level         2;
        gzip_proxied            any;
        gzip_types              text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_buffers            16 8k;
}

我的问题是,除了转向RAID设置,还有可能是SSD之外,还有什么我可以调整/调整以从这台机器中获取更多功能吗?我觉得像我这样的服务器应该能够处理每秒大约300到400个活动nginx连接。

2 个答案:

答案 0 :(得分:13)

除了提到的noatime选项@nos之外,您可能还需要考虑以下事项:

  • 在nginx中,设置access_log off; - 评论它不会做任何事情;你需要主动禁用它。
  • 减少工作进程数。 nginx不会从每个CPU的多个工作程序中受益。
  • tcp_nodelay on;将帮助nginx在“实时”连接上更快地提供文件。
  • 尝试使用tcp_nopush。我发现最好打开它,但是YMMV。
  • if_modified_since设为before;它将允许nginx发送304 Not Modified标头,而不是重新提供内容。
  • 使用open_file_cache设置
  • 减少send_timeout,以便nginx可以释放陈旧的客户端连接。

至于你的系统的其余部分:

  • hdparam设置。很多帮助你上网的教程,hdparam调整将充分利用你的磁盘。
  • 调整您的socket performance settings
  • 以降低的计时器频率重新编译内核。默认值为1000 Hertz,这对于提供视频的桌面计算机非常有用,但对于价值100-250可能更合适的服务器来说并不是那么好。
  • 禁用杯子和蓝牙等服务

但是,我认为最好的性能提升是将Varnish放在你的nginx服务器前面并使用它而不是nginx来提供静态文件。它会将内存中的“热”文件保存得比nginx更好,这样就可以很少/不使用磁盘来处理最常用的内容。

然而,最重要的是监控一切 - 不要随意使用,了解您的服务器正在做什么以及您的瓶颈在哪里。

答案 1 :(得分:0)

在700万个文件中,经常访问多少个?如果你看一块10KB,你最多只能在文件系统缓存中存储500,000个文件,为正在运行的程序和文件系统缓冲区(存储目录信息)留下1 GB的RAM。 / p>

如果您无法增加RAM来保存经常访问的文件,那么您需要更快的磁盘设置和更低的延迟。移至15K驱动器将使磁盘I / O容量增加一倍,但移动到SSD驱动器是您的最佳选择。