Re: Высокий IO на серверах с nginx

Alexey Malov scukonick на gmail.com
Сб Июл 11 23:53:24 UTC 2015


Как выяснилось, IO было дисковое, перенос cache в RAM всё излечил. Странно
только, почему раньше работало. Сейчас вариантов URL стало даже меньше. И
трафик опустился.

11 июля 2015 г., 17:57 пользователь Alexey Malov <scukonick на gmail.com>
написал:

>
>
> 11 июля 2015 г., 17:09 пользователь Alexey Malov <scukonick на gmail.com>
> написал:
>
> Добрый день,
>> Второй день наблюдаю проблему с высоким IO на серверах с nginx при не
>> очень большой нагрузке.
>> Схема такая - 11 серверов с nginx и tomcat. Nginx на каждому сервере
>> принимает трафик от CloudFlare CDN, большую часть отдаёт из кеша, остальное
>> балансирует на томкаты (и ещё один статический файлик отдаёт сам).
>> Всё было замечательно до вчера, трафик в пике был до 40 мегабайтов в
>> секунду, 40к параллельных соединений и ~1500 запросов в секунду на каждом
>> из серверов.
>> Вчера же трафик подскочил раза в полтора (сбрасывали кеш на CloudFlare и
>> сами запросы тоже поменялись), резко выроз IO на сервере (раньше его вообще
>> практически не было, а стало около 15-20%) и всё начало тупить.
>> Изначально думали на диск, но отключение логов практически никак не
>> повлияло.
>> В dmesg стали вылезать сообщения про synflood, увеличили бэклоги как в
>> nginx, так и в sysctl, сообщения про synflood пропали, но проблема с IO
>> осталась.
>>
>> Немного помогло отключение лоад-балансинга в nginx, теперь каждый nginx
>> проксирует на локальный томкат. Нагрузка на сеть понизилась, IO понизилось,
>> но всё равно осталось.
>>
>> Трафик с тех пор понизился даже ниже, чем был до проблемы, сейчас около
>> 1100 запросов в секунду. Но IO осталось. Nginx даже иногда по нескольку
>> секунд отвечает на запросы к странице stub_status.
>> Пробовали разделять сервера с tomcat и nginx, IO оставалось на стороне
>> nginx.
>>
>> Был бы очень признателен, если бы кто-нибудь подсказал хотя бы куда
>> копать. Потому что уже вроде как чем только не пробовали. Спасибо заранее!
>>
>> Конфиги следующие:
>> nginx.conf:
>> user              nginx;
>> worker_processes  8;
>> worker_rlimit_nofile 512000;
>> worker_rlimit_core  500M;
>>
>> error_log  /var/log/nginx/error.log;
>>
>> pid        /var/run/nginx.pid;
>>
>> events {
>>     worker_connections  256000;
>> }
>>
>> http {
>>     include       /etc/nginx/mime.types;
>>     default_type  application/octet-stream;
>>
>>     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
>>     log_format  main  '$remote_addr - $remote_user [$time_local]
>> "$request" '
>>                       '$status $body_bytes_sent "$http_referer" '
>>                       '"$http_user_agent" "$http_x_forwarded_for"';
>>     log_format upstream_balancing   '$remote_addr - $remote_user
>> [$time_local] '
>>                     '"$request" $status $bytes_sent '
>>                     '"$http_referer" "$http_user_agent" '
>>                     '"$upstream_addr" "$upstream_response_time"
>> "$geoip_country_code/$http_cf_ipcountry" "$http_host"
>> "$upstream_cache_status" '
>>     '"$http_cf_connecting_ip"';
>>     log_format ub_cloudflare   '$http_cf_connecting_ip - $remote_user
>> [$time_local] '
>>                     '"$request" $status $bytes_sent '
>>                     '"$http_referer" "$http_user_agent" '
>>                     '"$upstream_addr" "$upstream_response_time"
>> "$geoip_country_code/$http_cf_ipcountry" "$http_host"
>> "$upstream_cache_status" '
>>     '"$remote_addr" "$cookie___cfduid" "$cookie_uid"';
>>     access_log  /var/log/nginx/access.log  main;
>>
>>     sendfile        on;
>>
>>     keepalive_timeout  65;
>>
>>     proxy_cache_methods GET;
>>
>>     include /etc/nginx/conf.d/*.conf;
>>     include /etc/nginx/sites-enabled/*;
>>
>> }
>>
>> virtual host:
>> server {
>>     listen       1.1.1.1:80;
>>     listen       1.1.1.1:443 ssl;
>>     ssl_certificate /etc/nginx/ssl/cert.crt;
>>     ssl_certificate_key /etc/nginx/ssl/key.key;
>>     server_name  example.com;
>>     proxy_set_header clientCountryCode $http_cf_ipcountry ;
>>     proxy_ignore_headers "Set-Cookie";
>>     proxy_hide_header "Set-Cookie";
>>     proxy_next_upstream error timeout http_500;
>>
>>     location / {
>>         deny all;
>>     }
>>     location /manager {
>>         proxy_pass http://127.0.0.1:5885;
>>     }
>>     location /crossdomain.xml {
>>         root /tomcat/static_xml;
>>         expires 31d;
>>     }
>>     location ~ ^(/display.htm)$ {
>>         proxy_pass http://127.0.0.1:5885/banners/$1$is_args$args;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 2h;
>>
>>         expires 24h;
>>     }
>>     location ~ ^(/secure.jsp)$ {
>>         proxy_pass http://127.0.0.1:5885/banners/mojo/$1$is_args$args;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 2h;
>>         expires 12h;
>>
>>     }
>>     location ~ ^(/hela.jsp)$ {
>>         proxy_pass http://127.0.0.1:5885/banners/hela$1$is_args$args;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 2h;
>>         expires 12h;
>>
>>     }
>>     location ~ ^(/hela.exe)$ {
>>         proxy_pass http://127.0.0.1:5885/banners/hela$1$is_args$args;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 24h;
>>
>>     }
>>     location /wl/ba.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/wl/ba.jsp;
>>         #proxy_cache_key proxy_cache_key;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 48h;
>>         expires 1w;
>>     }
>>     location /wl/po.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/wl/po.jsp;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 48h;
>>         expires 1w;
>>     }
>>     location /tg.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/ba/tg.jsp;
>>         #proxy_cache_key proxy_cache_key;
>>         proxy_cache_key
>> $http_host$scheme$proxy_host$uri$is_args$arg_ger$arg_cst$arg__v$arg_t;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 48h;
>>         proxy_ignore_headers "Set-Cookie";
>>         add_header Cache-Control public;
>>         expires 36h;
>>     }
>>     location ~ ^/_(a|b|c|d|e|f|m|x|i|h)\.jsp$ {
>>         proxy_pass http://127.0.0.1:5885/banners/ba/_$1.jsp$is_args$args;
>>         proxy_cache_key
>> $http_host$scheme$proxy_host$uri$is_args$arg_tc$arg_t$arg_callback;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 8h;
>>         proxy_ignore_headers "Set-Cookie";
>>         expires 8h;
>>         deny all;
>>     }
>>     location /api/v1/stabucket {
>>         proxy_pass
>> http://127.0.0.1:5885/adsnetto_backend/api/v1/stabucket$is_args$args;
>>         proxy_cache_key
>> $http_host$scheme$proxy_host$uri$is_args$arg_tc$arg_t$arg_callback$arg_r;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 8h;
>>         proxy_ignore_headers "Set-Cookie";
>>         expires 8h;
>>     }
>>     location /_.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/ba/_.jsp;
>>         proxy_cache_key
>> $http_host$scheme$proxy_host$uri$is_args$arg_tc$arg_t$arg_callback;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 12h;
>>         proxy_ignore_headers "Set-Cookie";
>>         expires 12h;
>>     }
>>     location /tag_test.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/ba/tag_test.jsp;
>>         expires 36h;
>>     }
>>     location /clk.action {
>>         proxy_pass http://search.utop.it;
>>         proxy_set_header Host search.utop.it;
>>     }
>>     location /exe {
>>         proxy_pass http://127.0.0.1:5885/banners/exe;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 200 24h;
>>     }
>>     location /ini.jsp {
>>         proxy_pass http://127.0.0.1:5885/banners/loca/ini.jsp;
>>         proxy_cache exe_cache;
>>         proxy_cache_valid 4h;
>>         expires 12h;
>>     }
>>     location /img/px.png {
>>         alias /tomcat/webapps/banners##1.3/img/px.png;
>>         userid         on;
>>         userid_name    uid;
>>         userid_domain "example.com; HttpOnly";
>>         userid_expires max;
>>         expires epoch;
>>     }
>>     access_log /var/log/nginx/example.com_access.log ub_cloudflare
>> buffer=10m flush=1m;
>>     error_log /var/log/nginx/example.com_error.log error;
>> }
>>
>> nginx -V:
>> # nginx -V
>> nginx version: nginx/1.6.2
>> built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
>> TLS SNI support enabled
>> configure arguments: --prefix=/usr/share/nginx
>> --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf
>> --error-log-path=/var/log/nginx/error.log
>> --http-log-path=/var/log/nginx/access.log
>> --http-client-body-temp-path=/var/lib/nginx/tmp/client_body
>> --http-proxy-temp-path=/var/lib/nginx/tmp/proxy
>> --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi
>> --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi
>> --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid
>> --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx
>> --with-file-aio --with-ipv6 --with-http_ssl_module
>> --with-http_realip_module --with-http_addition_module
>> --with-http_xslt_module --with-http_image_filter_module
>> --with-http_geoip_module --with-http_sub_module --with-http_dav_module
>> --with-http_flv_module --with-http_mp4_module
>> --with-http_gzip_static_module --with-http_random_index_module
>> --with-http_secure_link_module --with-http_degradation_module
>> --with-http_stub_status_module --with-debug --with-cc-opt='-O2 -g -pipe
>> -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
>> --param=ssp-buffer-size=4 -m64 -mtune=generic'
>>
>> В sysctl подкручивали:
>> net.ipv4.tcp_fin_timeout = 15
>> net.ipv4.tcp_tw_reuse = 1
>> net.ipv4.tcp_tw_recycle = 0
>> net.core.netdev_max_backlog = 65536
>> net.ipv4.tcp_max_syn_backlog = 262144
>> net.core.somaxconn = 262144
>> net.core.rmem_max = 8388608
>> net.core.wmem_max = 8388608
>> net.core.rmem_default = 65536
>> net.core.wmem_default = 65536
>> net.ipv4.tcp_rmem = 8192 873800 8388608
>> net.ipv4.tcp_wmem = 4096 655360 8388608
>> net.ipv4.tcp_synack_retries = 2
>> net.ipv4.tcp_syn_retries=2
>>
>> Картина в netstat:
>> # netstat -ant | grep tcp | tr -s ' ' ' ' | awk '{print $6}' | sort |
>> uniq -c
>>       8 CLOSE_WAIT
>>   32970 ESTABLISHED
>>      22 FIN_WAIT1
>>       3 LAST_ACK
>>      17 LISTEN
>>      23 SYN_RECV
>>   27976 TIME_WAIT
>>
>> --
>> Alexey Malov
>>
>
> Забыл уточнить, сервера примерно такой конфигурации:
> Intel(R) Xeon(R) CPU E5-1620 v2 (8 core)
> 64GB RAM
>
> Tomcat нагрузку почти не создает, до него доходит в лучшем случае запросов
> 10-15 в секунду.
>
> --
> Alexey Malov
>



-- 
Alexey Malov
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150711/940a2c95/attachment.html>


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