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

为大量静态内容的服务器调优Nginx/CentOS,nginx,centos,performance,iostat,Nginx,Centos,Performance,Iostat,我有一台64位(centos5.5)、2.83GHz Q9550、6gb ram和一个SATA 500gb驱动器的linux机器 从这台机器上,我只提供缩略图,大多数大小在10kb左右,目前服务器上大约有700万个缩略图。我在一个/25/25/25/25文件夹中设置了它们,这是我推荐的 平均而言,nginx状态报告显示,im为大约300到400个活动连接提供服务 例如: Active connections: 297 server accepts handled requests 19758

我有一台64位(centos5.5)、2.83GHz Q9550、6gb ram和一个SATA 500gb驱动器的linux机器

从这台机器上,我只提供缩略图,大多数大小在10kb左右,目前服务器上大约有700万个缩略图。我在一个/25/25/25/25文件夹中设置了它们,这是我推荐的

平均而言,nginx状态报告显示,im为大约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个活跃的NGNIX连接。

< P>连同<代码> NoTime<代码>选项NOS,您可能需要考虑以下内容:

  • 在nginx中,设置
    access\u注销--注释它没有任何作用;您需要主动禁用它
  • 减少辅助进程的数量。nginx不能从每个CPU有一个以上的工作进程中获益
  • tcp\u节点延迟开启
    将帮助nginx在“实时”连接上更快地提供文件
  • 尝试玩
    tcp\u nopush
    。我发现最好把它打开,但是YMMV
  • 如果从开始修改,则将设置为之前的;它将允许nginx发送
    304未修改的
    标题,而不是重新提供内容
  • 播放设置
  • 减少
    send\u超时
    ,以便nginx可以释放过时的客户端连接
至于系统的其余部分:

  • hdparam
    设置。有很多教程可以帮助您在线使用,hdparam的调整将使您的磁盘发挥最大的作用
  • 调整你的
    插座
  • 以较低的计时器频率重新编译内核。默认设置是,这对于提供视频的台式机来说非常好,但对于服务器来说却不是那么好,因为服务器的值为100-250可能更合适
  • 禁用cups和蓝牙等服务
但是,我认为最好的性能提升是放在nginx服务器前面,并使用它而不是nginx来提供静态文件。它将比nginx更好地将“热”文件保存在内存中,这样您的大部分服务内容就几乎没有磁盘使用了


不过,最重要的是要监控一切——不要凭直觉,知道服务器在做什么以及瓶颈在哪里。

在700万个文件中,有多少经常被访问?如果您的内存为10KB,则最多只能在文件系统缓存中存储500000个文件,为运行的程序和文件系统缓冲区(存储目录信息)留下1GB的RAM


如果您无法增加RAM以容纳频繁访问的文件,那么您需要更快的磁盘设置和更低的延迟。移动到15K驱动器将使您的磁盘I/O容量翻倍,但移动到SSD驱动器是最适合您的情况。

这会更好,您应该尽快做的一件事是禁用atime,使用
noatime
选项将文件安装在文件所在的文件系统上-这将大大减少驱动器IO-您可能不需要更新文件的访问时间谢谢回复,noatime似乎是一个很好的选项。我找到了这个教程,我必须将noatime添加到/dev/sda5。不需要重新启动就可以完成,但是mount命令是否不会使机器减速/锁定一段时间,或者这个命令是即时的?我会使用relatime而不是noatime。当访问时间早于修改后的时间时,它将更新访问时间。该站点甚至还讨论了“nodiratime”,这意味着:不要更新此文件系统上的目录inode访问时间,或者使用缓冲来代替完全关闭访问日志:
access\u log path combined buffer=16k
“调整你的套接字”已失效。