ubuntu 14.04-优化Ubunto和nginx来处理静态文件



我正在试验nginx(第一次(来提供静态文件(400kb(。我已经在linode服务器(2gb ram,2核3tb传输(和nginx上安装了ubuntu 14.4。

打开的文件设置为9000,gzip打开,进程=2,工作连接4000

在50个用户和10秒的斜坡上使用jmeter,我实现了800毫秒的采样时间,cpu和mem显然不是一个因素,100个用户,这增加到5/6秒,转出速度应该是250 mbps,这就解释了这一点。

但是,是否有优化可以使进程更优雅地处理负载?即2秒而不是5/6?

nginx文件:

        user www-data;
    worker_processes 2;
    pid /run/nginx.pid;
    events {
        worker_connections 4000;
        multi_accept on;
        use epoll;
    }
    http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 15;
        #types_hash_max_size 2048;
        # server_tokens off;
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        ##
        # Gzip Settings
        ##
        gzip on;
        gzip_disable "msie6";
         gzip_vary on;
         gzip_proxied any;
         gzip_comp_level 9;
         gzip_buffers 16 8k;
         gzip_http_version 1.1;
         gzip_types text/plain text/css text/html application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##
        #include /etc/nginx/naxsi_core.rules;
        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##
        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }

如前所述,如果您想使用gzip,请使用http_gzip_static模块,这样nginx就不必在每次请求时对文件进行gzip处理。然而,您需要自己放置文件的gzip版本,nginx只有在找到它时才会提供它们(它不会创建它们(。

在提供静态文件时,可以调整更多参数以获得最大性能:

sendfile on;
open_file_cache         max=2500 inactive=120s;
open_file_cache_valid   10s;
open_file_cache_min_uses 2;
open_file_cache_errors  on;

Sendfile通过减少用户和内核空间之间在内存内复制数据的次数,可以更快地提供静态文件(它对内核说,不要将文件内容复制到我的nginx内存,而是直接复制到网络套接字(。

打开文件缓存防止在每次请求时检查文件系统中的文件更改,因为没有理由每秒检查1000次。您可以根据nginx手册调整这些值。将其增加到几秒钟以上并没有多大好处。

Keepalive如果您向浏览器提供多个文件(通常只有很少的javascript、css和图像(,那么Keepalive是非常重要的。如果没有它,客户端将需要为它们中的每一个创建一个新的TCP连接,这相当慢(我看到您已经启用了这一功能(。如果你通常只为每个用户提供一个文件,你可以禁用keepalive,但使用nginx,它不会给你带来什么好处,你不会因为无用的开放套接字而浪费服务器内存。

multi_accept on也可能对性能产生负面影响,您需要对其进行基准测试,看看什么更适合您。accept_mutex也是如此。或者,如果你的nginx至少是v1.9.1,你可以使用listen ... reuseport为每个工作线程提供单独的侦听套接字,这应该具有最好的性能。

为了获得真正高的性能,您可能还需要调整服务器的TCP/IP堆栈参数。

对日志文件使用缓冲,这样nginx就不必经常对它们进行写入,例如access_log /var/log/nginx/access.log common buffer=1k;。每个nginx工作程序只有在准备好1字节的数据时才会写入日志文件-请注意,如果您使用awstats或其他日志分析软件,如果日志文件中的时间倒退,它可能会出现问题。在这种情况下,根据req/s来估计缓冲区大小,这样每个工作者将在0.5s内填满它(例如,日志中的每一行是200字节,1000 req/s和2个工作者意味着每个工作者在1秒内产生100kb的数据,所以我们可以将缓冲区设置为64kb(。

Gzipping正在扼杀您的性能。由于您提供的是静态文件,请考虑提前压缩它们。

有一个单独的扩展为您启用此功能:http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html

最新更新