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