我有一台 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/