Память на буферы заполучить

Anton Maksimenkov engineer at hlebprom.ru
Mon Feb 20 14:57:20 MSK 2006


 Посматривая на некоторые письма вижу, что у народа nginx хватает по
150-250 Мб на себя. У меня же на относительно большом кол-ве запросов
он еле до 14-15 Мб дотягивает. То есть примерно такая картина:

 # ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'|grep -v 'grep'
  PID  PPID USER     %CPU   VSZ WCHAN  COMMAND
22548     1 root      0.0   704 pause  nginx: master process /usr/local/sbin/nginx
 8219 22548 www       0.0 14736 kqread nginx: worker process (nginx)
31271 22548 www       0.0 14272 kqread nginx: worker process (nginx)
16397 22548 www       0.0 14820 kqread nginx: worker process (nginx)
12312 22548 www       0.0 14272 biowai nginx: worker process (nginx)
12020 22548 www       0.0 14332 kqread nginx: worker process (nginx)
28181 22548 www       0.1 14684 biowai nginx: worker process (nginx)
15242 22548 www       0.0 14272 biowai nginx: worker process (nginx)
30943 22548 www       0.0 14272 kqread nginx: worker process (nginx)
13155 22548 www       0.0 14592 kqread nginx: worker process (nginx)
28186 22548 www       0.0 14272 kqread nginx: worker process (nginx)
 4986 22548 www       0.0 14272 kqread nginx: worker process (nginx)
20236 22548 www       0.0 14272 kqread nginx: worker process (nginx)
 2803 22548 www       0.0 14312 getblk nginx: worker process (nginx)
29713 22548 www       0.0 14272 kqread nginx: worker process (nginx)
26670 22548 www       0.0 14464 -      nginx: worker process (nginx)
20421 22548 www       0.0 14272 kqread nginx: worker process (nginx)
...

 Это при том, что на выдаче трафика как я уже указывал наблюдаются
некоторые "подтормаживания" (в сравнении с апачем). Хотя в точности
теперь уже не могу сказать, столько раз менял их, что уже потерялся...

 Однако, мне думается, что 14Мб это сильно мало для трафика порядка
8-10 Мбит/с, есть надежда, что если бы хорошенько использовать буферы,
то "подтормаживаний" наверное можно было бы избежать. Конфиг выглядит
примерно так:

user  www www;
worker_processes 32;
events {
    worker_connections  64000;
}

http {
    tcp_nodelay    on;
    output_buffers  131072 8k;  # <-
    postpone_output 40;         # <- это я уже как только не менял

        userid          on;
        userid_name     Apache;

        server_names_hash_max_size      2048;
        server_names_hash_bucket_size   256;

    server {
        listen  X.X.X.X:80 default backlog=2048;
        server_name     www.domen.ru *.domen.ru;
        proxy_buffers    16384 128k;
        set $host_part  "";
        
        location ~* \.(gif|jpe?g|png)$ {
                if ($http_host ~* ^(.+)\.domen\.ru.*$) {
                        set $rootdir    /var/www/domen.ru/$1/;
                }
                root    $rootdir;
        }
        
        location / {
                if ($http_host ~* "^(.+)\.domen\.ru.*$") {
                        set $host_part  $1;
                }
                rewrite ^(.*)$  /$host_part/$1  break;
                proxy_pass      http://127.0.1.6;
        }
        access_log  /var/www/logs/access.log accounting buffer=32k;
    }
        и ещё пара таких server {}
...

 И ведь не ест он даже близко 131072 * 8 Kб. Картинки читает напрямую
с диска; теперь нету такого, чтобы в biowai все процессы сидели, обмен
с диском примерно 2-3 Кб/с. Вроде бы тут самое место все запрошенные
картинки в буфер в память хапнуть, и потом постепенно знай сливай их
клиенту...

 Я правильно надеюсь?
-- 
engineer






More information about the nginx-ru mailing list