High periodic disk I/O

Петр Гузанов gpskomsa at mail.ru
Tue Jan 14 13:54:52 UTC 2014


 Добрый день!

Имеется сервер freebsd 9.2 amd64, 16gb ram, gmirror 2.7Tb x 2, nginx 1.4.2

За Nginx стоит php-fpm на котором работает сайт, средне нагруженный(1-10 запрос/сек). Кроме того, nginx через проксирование другого хоста отдает статику, которая таким образом, представляет собой динамически накопляемый кеш. Т.е. приходит запрос, nginx смотрит наличие статики в кеше, если нет получает ее с другого хоста, отдает ответ.

В данный момент в таком кеше порядка 700к файлов, все они размером примерно от 10кб до 100кб, общий размер данных в кеше 10gb.
Проблема в том, что периодически, раз в 10-20 секунд nginx подгружает диск записью на 2-5 секунды, изза этого случается лаг и например ответ от веб сервера можно ждать несколько секунд. Отчет gstat:

 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0     55      8    120   2689     47    903   4952   91.4| ada0
   12     36      4     68   2652     32    659   5418   96.4| ada1
   12     51     12    188   2676     39    855   5410  108.2| mirror/gm

Если отключить в nginx работу со статикой через такое проксирование и отдавать ее мимо nginx, то такое поведение пропадает - диск никто периодически не насилует.
Вот конфиг:

user  web;
worker_processes  8;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    gzip_disable "msie6";

    proxy_cache_path  /var/www/cache/static levels=2:2 keys_zone=cachearea:3000m max_size=1000000m inactive=1y;
    proxy_temp_path /var/www/cache/tmp;
    include /usr/local/etc/nginx/conf.d/*.conf;
}

server {
    listen 80;

    server_name www.domain.com;
    root /var/www/domain/public;

    access_log /var/log/domain-access_log;
    error_log /var/log/domain-error_log warn;

    sendfile off;
    aio on;

    client_max_body_size       100m;
    client_body_buffer_size    128k;

    location / {
        index index.html index.php;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~* /static/(?<chosturi>.*)$ {
        expires max;

        resolver 8.8.8.8;
        proxy_pass http://proxydomain.com/$chosturi?$query_string;
        proxy_cache cachearea;
        proxy_cache_key $chosturi;
        proxy_cache_valid 404 301 302 500 502 503 1h;
        proxy_cache_valid 200 204 10y;
    }

    location ~ /index\.php$ {
        include fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

Собственно вопрос в том как избавится от таких периодических нагрузок на диск.
Спасибо.

-- 
Петр
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20140114/be4e0ec1/attachment.html>


Подробная информация о списке рассылки nginx-ru