3

我有一台 64 位(centos5.5)的 linux 机器,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% 的实用程序。

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 连接。

4

2 回答 2

13

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

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

至于系统的其余部分:

  • hdparam设置。许多在线教程可以帮助您,hdparam 调整将充分利用您的磁盘。
  • 调整您的socket 性能设置
  • 用降低的定时器频率重新编译内核。默认值为1000 赫兹,这对于提供视频的台式机非常有用,但对于值 100-250 可能更合适的服务器来说并不是那么好
  • 禁用杯子和蓝牙等服务

但是,我相信最好的性能提升是将Varnish放在您的 nginx 服务器前面并使用它而不是 nginx 来提供静态文件。它将比 nginx 更好地将“热”文件保存在内存中,因此您最常服务的内容几乎没有/没有磁盘使用。

然而,主要的事情是监控一切——不要凭直觉,知道你的服务器在做什么以及你的瓶颈在哪里。

于 2011-02-01T08:56:27.157 回答
0

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

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

于 2011-02-10T06:30:26.063 回答