我有一些运行nginx的文件托pipe服务器,提供平均大小从500MB到6GB的静态文件。 服务器使用Lustre1.8作为集群文件系统。 文件保留在条带大小= 512KB的raid6arrays上。
在正常情况下,nginx工作得很好。
_磁盘I / O:设备:tps MB_read / s MB_wrtn / s MB_read MB_wrtn
sdc 727.00 136.23 5.75 136 5
sdd 627.00 124.36 0.01 124 0
_出车:
eth2:480.00 b / s 551.30 Mb / s 551.30 Mb / s
eth3:480.00b / s 481.72Mb / s 481.72Mb / s
eth4:136.47 Mb / s 525.45 Mb / s 661.92 Mb / s
eth5:480.00 b / s 497.82 Mb / s 497.82 Mb / s
bond0:136.47 Mb / s 2.01 Gb / s 2.14 Gb / s
_文件数量正在服务:
3982
但是,在热门的情况下(当一个新的热门文件,可能是最近上传的色情DVD或JAV),有很多客户端(800多个)同时下载该文件,Nginx进程将D州。 最后,几乎所有的进程都是D状态! 这使得下载速度很慢:(
根25821 0.0 0.0 33032 584? Ss Dec20 0:00 nginx:主进程/ usr / sbin / nginx -c /etc/nginx/nginx.conf
nginx 25823 0.8 1.5 158384 126396? S Dec20 23:53 nginx:工作进程
nginx 25824 0.7 1.8 182276 150420? D Dec20 21:58 nginx:工作进程
nginx 25825 0.7 2.1 207584 175728? D Dec20 22:01 nginx:工作进程
nginx 25826 0.8 1.8 186052 154196? D Dec20 23:32 nginx:工作进程
nginx 25827 0.7 1.9 191448 159464? D Dec20 23:03 nginx:工作进程
nginx 25828 0.8 1.6 166044 134188? D Dec20 24:56 nginx:工作进程
nginx 25829 0.7 1.3 139308 107452? S Dec20 23:00 nginx:工作进程
nginx 25830 0.7 1.7 176652 144796? D Dec20 21:08 nginx:工作进程
nginx 25832 0.7 1.2 136648 104788? D Dec20 20:25 nginx:工作进程
nginx 25833 0.8 1.7 178948 146964? D Dec20 23:27 nginx:工作进程
nginx 25834 0.7 2.0 195828 163968? D Dec20 21:45 nginx:工作进程
nginx 25835 0.8 1.6 166200 134344? S Dec20 23:30 nginx:工作进程
nginx 25836 0.8 1.3 144624 112640? D Dec20 23:50 nginx:工作进程
nginx 25837 0.7 1.3 143644 111784? D Dec20 22:02 nginx:工作进程
nginx 25838 0.7 1.3 141912 110056? D Dec20 21:17 nginx:工作进程
nginx 25839 0.6 1.4 150580 118724? S Dec20 20:12 nginx:工作进程
nginx 25840 0.8 1.5 158916 126928? D Dec20 23:48 nginx:工作进程
…
我已经尝试了很多次调整过程工作者的数量,但我没有工作! 我怎样才能解决这个问题 ? 我想当很多客户端访问同一个文件时,它会因为caching而变得更好。
这里是nginx的configuration:
#
worker_processes 48; worker_rlimit_nofile 800000; 事件{worker_connections 51200; 使用epoll; } http {sendfile off; 方向1m; output_buffers 1 512k;
tcp_nopushclosures; tcp_nodelay;
keepalive_timeout 5; …
nginx:nginx版本:nginx / 1.0.0 nginx:由gcc编译4.1.2 20080704(Red Hat 4.1.2-50)
Linux OST 2.6.18-194.17.1.el5_lustre.1.8.5#1 SMP Mon Nov 15 15:48:43 MST 20
如果你需要更多的信息,告诉我。
您的磁盘子系统无法提供足够的速度,这就是nginx被locking在IO上的原因,因为它默认是同步的。
您可以尝试使用aio: http ://wiki.nginx.org/HttpCoreModule#aio – 这将是工作进程locking的解决scheme,所以与代理或其他asyncronus操作相关的所有其他请求将运行得更快。 但是aio不会加速你的下载速度。
考虑添加更多的内存:从8增加到24 GB将改善Linux vfscaching,它可能会给不可思议的结果。
RAID6不适合静态文件服务。 它performance出良好的速度,而单线读数和性能在几十个和几百个同时读数下降。 没有比configuration为JBOD的独立磁盘更好的了。 您也可以尝试将SSD用于某些“热门”内容。