дисковая нагрузка приводит к ребуту
Михаил Монашёв
postmaster на softsearch.ru
Вс Сен 12 16:51:35 MSD 2010
Здравствуйте.
Есть сервер, использующийся как хранилище кучи мелких файлов. Если на
нём спомощью вебдава эти файлы копировать и перемещать, создавая тем
самыми большую нагрузку на диск, то воркеры начинают висеть в
состоянии biord или ufs или wdrain или suspfs, а в состоянии kqread
ниодного не остаётся. gstat показывает полную загрузку разделов, к
которым обращается nginx. FreeBSD 8.1 начинает тормозить, ибо диски не
справляются, и через некоторое перезагружается. vmstat -z не
показывает превышения лимитов. Используется AIO. Корки пока нет.
Скажите пожалуйста, что может выедать nginx при тормозах дисков, что
приводит к ребуту?
nginx version: nginx/0.8.46
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-file-aio --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --with-http_dav_module --with-http_realip_module --with-http_stub_status_module --with-pcre
Конфиг:
worker_processes 30;
error_log /opt/log/nginx/error.log;
events {
use kqueue;
worker_connections 2024;
#worker_connections 16384;
#accept_mutex off;
#debug_connection 41.233.38.203;
}
http {
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/x-javascript js;
text/plain txt;
image/png png;
image/x-icon ico;
application/x-shockwave-flash swf;
audio/mpeg mp3;
application/x-gzip gz;
}
default_type application/octet-stream;
log_format main '$time_local $remote_addr $bytes_sent $host "$request" $status "$http_referer" "$http_user_agent"';
access_log /opt/log/nginx/access.log main;
sendfile_max_chunk 128k;
sendfile on;
tcp_nopush on;
aio sendfile;
tcp_nodelay on;
send_lowat 12000;
keepalive_timeout 75 60;
output_buffers 1 8k;
postpone_output 1460;
gzip off;
reset_timedout_connection on;
server_names_hash_max_size 32768;
log_not_found off;
client_max_body_size 20m;
proxy_set_header Host $host;
proxy_cache_path /opt1/favicons levels=1:1 keys_zone=favicons:50m inactive=3d max_size=5G;
resolver 87.242.76.68;
server {
listen 87.242.76.164:80 default accept_filter=httpready rcvbuf=4096 sndbuf=131072;
server_name for.trash.ru;
location / {
return 204;
}
location = /nginx_status {
stub_status on;
}
}
server {
listen 87.242.76.164:80;
server_name f.beon.ru f.mindmix.ru f.ltalk.ru f.carguru.ru f.car-guru.com f.qaix.com f.ryxi.com f.gyxe.com f.gyxu.com f.xywe.com f.xyqe.com;
proxy_intercept_errors on;
error_page 301 302 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 422 423 424 425 426 449 500 501 502 503 504 505 506 507 509 510 = /zero;
proxy_cache favicons;
proxy_cache_key $proxy_host;
proxy_temp_path /opt1/favicons/proxy_tmp_path;
proxy_cache_valid any 30d;
proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Expires Cache-Control;
proxy_hide_header Location;
expires 30d;
location / {
return 204;
}
location = /zero {
return 204;
}
# aa.ru
location ~ "^/([a-z0-9-]{1,50}\.[a-z]{2,4})$" {
proxy_set_header Host $1;
proxy_pass http://$1/favicon.ico;
}
# bb.aa.ru
location ~ "^/([a-z0-9-]{1,50}\.[a-z0-9-]{1,50}\.[a-z]{2,4})$" {
proxy_set_header Host $1;
proxy_pass http://$1/favicon.ico;
}
# cc.bb.aa.ru или 111.222.33.44
location ~ "^/([a-z0-9-]{1,50}\.[a-z0-9-]{1,50}\.[a-z0-9-]{1,50}\.[a-z0-9]{1,4})$" {
proxy_set_header Host $1;
proxy_pass http://$1/favicon.ico;
}
}
include servers;
}
кусочек servers:
server {
listen 87.242.76.164:80;
server_name i0.carguru.ru b.i0.carguru.ru;
rewrite ^(/\d+/\d+/\d+/)\d+/(avatars/.+|design/.+|0\.(?:gif|jpeg|png|mp3))$ /$1$2 last;
location / {
expires 1y;
root /opt1/cargururu/i0;
if ($request_method = GET ) {
error_page 404 = @fallback;
}
client_body_temp_path /opt1/cargururu/webdav-tmp;
dav_methods PUT DELETE COPY MOVE;
create_full_put_path on;
dav_access user:rw group:rw all:r;
limit_except GET {
allow 127.0.0.0/8;
allow 10.0.0.0/8;
allow xx.xx.xx.xx/29;
deny all;
}
}
location @fallback {
expires 1s;
rewrite ^.*$ http://a0.carguru.ru/i/users$request_uri redirect;
}
}
...
всего примерно 1000 блоков server {}
--
С уважением,
Михаил Монашёв
mailto:postmaster at softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.
Подробная информация о списке рассылки nginx-ru