2011-01-29 46 views
3

我有一台Linux机64bit(centos5.5),2.83GHz Q9550,6gb内存和一个单一的SATA 500GB驱动器。调整Nginx/CentOS的服务器大量的静态内容

从这台机器我只提供缩略图,大部分大小约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连接。

+0

这会更好放在http://serverfault.com – tomeduarte 2011-01-29 19:52:38

+0

你应该尽快做一件事是禁用atime,用`noatime`选项挂载文件所在的文件系统 - 这会减少驱动器IO相当多 - 你可能不需要更新文件的访问时间 – nos 2011-01-29 19:56:33

回答

13

随着提到noatime选项@nos,你可能要考虑以下几点:

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

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

  • hdparam设置。很多教程可以帮助你在线,hdparam的调整将最大限度地利用你的磁盘。
  • 调整您的socketperformance settings
  • 以降低的定时器频率重新编译内核。默认为1000 Hertz这是伟大的台式机提供视频,但并非所有的服务器,其中100-250的值可能更合适
  • 禁用服务,如杯子和蓝牙良好

然而,我相信最好的性能提升会将Varnish放在你的nginx服务器前,并使用它而不是nginx来提供静态文件。它会使内存中的“热门”文件比Nginx更好,这样就可以使用最少的/没有磁盘的内容。

最主要的是但监测一切 - 不要用你的直觉走,知道你的服务器在做什么,在您的瓶颈。

0

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

如果您不能增加内存以容纳经常访问的文件,那么您需要更低的延迟更快的磁盘设置。转移到15K驱动器将使您的磁盘I/O容量增加一倍,但转移到SSD驱动器是适合您情况的最佳选择。