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

标签 nginx centos performance iostat

我有一台 64 位 Linux 机器 (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% 的利用率。

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

最佳答案

除了提及的 noatime 选项@nos,您可能还需要考虑以下内容:

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

至于你系统的其余部分:

  • hdparam 设置。许多在线教程可帮助您,hdparam 调整将使您的磁盘发挥最大作用。
  • 调整您的套接字 performance settings
  • 以降低的定时器频率重新编译内核。默认为 1000 Hertz这对于提供视频的台式机来说非常有用,但对于服务器来说并不是那么好,因为 100-250 的值可能更合适
  • 禁用杯子和蓝牙等服务

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

然而,最主要的是监控一切——不要随心所欲,了解您的服务器在做什么以及瓶颈在哪里。

关于nginx - 为服务器大量静态内容调整 Nginx/CentOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839039/

相关文章:

linux - 如何隐藏脚本的输出,同时解析内容以显示反馈?

ios - 将大量数据存储到核心数据中

performance - OCaml 异常的表现

php - 长轮询选项 : Nginx, PHP、Node.js

node.js - NGINX、边缘、HAPRoxy

python - Flask 应用程序在通过 nginx 代理时提供无处不在的 404

linux - mount:/dev/mapper/centos-home: 无法读取 super block

linux - centos 7.5 (vesta) 上出现内部错误 500。暂停?

google-app-engine - 继续 Google App Engine 频繁关闭

c++ - 为什么 64 位版本的应用程序比 32 位版本的应用程序慢得多