огромный iowait :(

Denis O.Philippov denis at mezon.ru
Fri Dec 29 16:04:06 MSK 2006


В сообщении от 29 декабря 2006 04:26 Adlan Elm. написал(a):
> Доброго времени суток.
>
> У меня крутится nginx 0.5.4 с апачем 2.0.55 на порту 8080 конфиг ниже.
> Конфиг для каждого виртуального хоста генерится автоматом через чуть
> переделанный ispconfig. Виртуальных хостов штук 7.
>
> Железо  AMD Opteron(tm) Processor 144, 1ГБ, 80ГБ SATA HDD (/dev/sda:
> ATA       ST3808110AS       3.AA) , ОСь -  ubuntu 6.06 amd64
>
> На сервер часто выкладывают большие файлы, например те же фильмы по
> 700мб и
> при отдаче таких файлов iowait возрастает напомерно, кроме вот этого
> больше никаких нареканий нет. причем размер буфферов в top показывает
> меньше 1 мега. гуглил нескока дней и ни разу не видел
> чтоб у кого-то была такая же проблема, что я аж такую очевидную ошибку
> сделал ? 58% wa это ну ни в какие ворота ...
>
> Cpu(s): 11.5% us, 44.2% sy,  0.0% ni,  0.0% id, 58.5% wa,  1.9% hi,
> 3.8% si
> Mem:    995380k total,   987308k used,     8072k free,      864k buffers
> Swap:  1020116k total,      152k used,  1019964k free,   196544k cached
>
>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
> COMMAND
>  1787 www-data  18   0 17376 5356  764 R  1.2  0.5   0:26.99
> nginx
>  1786 www-data  18   0 26988  14m  768 D  3.9  1.5   0:06.57
> nginx
>  1785 www-data  18   0 19516 7540  768 R  2.0  0.8   0:13.57
> nginx
>  3402 www-data  15   0  181m  39m 1668 D  2.0  4.0   0:00.01
> apache2
>
>
>
> nginx начиная с 0.4.. версии постоянно собирал вот так:
>
> ./configure \
> --prefix=/usr \
> --sbin-path=/usr/sbin \
> --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/spool/nginx/client_body_temp \
> --http-proxy-temp-path=/var/spool/nginx/proxy_temp \
> --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp \
> --pid-path=/var/run/nginx.pid \
> --user=www-data \
> --group=www-data        \
> --with-rtsig_module     \
> --with-select_module    \
> --with-poll_module      \
> --with-http_ssl_module  \
> --with-http_realip_module \
> --with-http_addition_module \
> --with-imap     \
> --with-openssl=/usr/lib \
> --with-md5=/usr/lib \
> --with-sha1=/usr/lib
> ___________________________________________________________
> вот конфиг с одним виртуальным хостом. Все остальные виртуальные хосты
> идут с такой же конфигурацией, но с пустой custom directives секцией
> __________________________________________________________
> user www-data www-data;
> worker_processes 3;
> pid /var/run/nginx.pid;
> error_log /var/log/nginx.error_log debug;
> events {
> worker_connections 1024;
> use epoll;
> }
> http {
>     include /etc/nginx/mime.types;
>     default_type application/octet-stream;
>     log_format combined_log '$server_name||||$bytes_sent||||$remote_addr
> - - [$time_local] "$request" $status $bytes_sent "$http_referer"
> "$http_user_agent"';
>     access_log /var/log/httpd/ispconfig_access_log combined_log;
>
> server{
>     listen 80;
>     server_name xxx.xxxx.org xxxx.org ;
>     error_log /home/user/log/nginx_error.log.nginx info
>     override_charset off;
>
>     location / {
>     proxy_pass http://xx.xx.xx.xx:8080/;
>     proxy_buffering on;
>     proxy_redirect default;
>         proxy_set_header Host $host;
>         proxy_set_header X-Real-IP $remote_addr;
>         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>     client_max_body_size       32m;
>         client_body_buffer_size    256k;
>         proxy_connect_timeout      90;
>         proxy_send_timeout         90;
>         proxy_read_timeout         90;
>         proxy_buffer_size          1k; #IPboard местами тормозит если
> больше
>         proxy_buffers              4 32k;
>         proxy_busy_buffers_size    64k;
>         proxy_temp_file_write_size 64k;
>     index index.html index.htm index.php index.php5 index.php4
> index.php3 index.shtml index.cgi index.pl index.jsp Default.htm
> default.htm;
>     }
> error_page 400 /home/user/web/error/invalidSyntax.html;
> error_page 401 /home/user/web/error/authorizationRequired.html;
> error_page 403 /home/user/web/error/forbidden.html;
> error_page 404 /home/user/web/error/fileNotFound.html;
> error_page 405 /home/user/web/error/methodNotAllowed.html;
> error_page 500 /home/user/web/error/internalServerError.html;
> error_page 503 /home/user/web/error/overloaded.html;
>
>     location ~*
> ^.+\.(jpg|jpeg|gif|png|ico|js|rar|zip|7z|avi|mpg|mpeg|mov|bz2|mp3|wmv|iso)$
> {
>         root /home/user/web;
>     }
>     location  /icon {
>              root  /home/awstats/wwwroot/icon/;
>     }
>
> ##virtual host custom directives
> location ~* ^.+.(rar|zip|7z|avi|mpg|mpeg|mov|bz2|mp3|wmv|iso)$ {
>   valid_referers none server_names;
>   if ($invalid_referer){
>    rewrite ^/  http://xxx.xxxx.org permanent;
>   }
>         root /home/user/web;
> }
>
>   if ($host !~* ^xxx.xxxx.org){
>     rewrite ^(.*)$  http://xxx.xxxx.org$1 permanent;
>   }
> }
> ##end of custom directives
>
> }


Поставьте 
worker_processes 1;

и 

worker_connections 512;

Для того, чтобы уменьшить iowait нужно сериализовать обращения к диску от 
nginx, для этого нужно запускать по одному worker'у на каждое физическое 
устройство хранения. 

-- 
With best wishes
Denis O.Philippov, denis at mezon.ru


More information about the nginx-ru mailing list