Странности с RSS

Mike Kolesnikov mozilla_bugs at mail.ru
Tue Jan 25 11:11:27 MSK 2005


Добрый день.

Обнаружил какие-то странности в memory usage у nginx при обработке keepalive
коннектов, только неясно, в самом nginx или в линуксе. Что-то типа утечки,
или мегакеширования?

Эффект проявляется только на домашнем redhat 7.3 с ядром 2.6.7. Я даже собрал
static бинарник на системе, где эффект не проявляется, и запустил его на домашнем
компе. Вот как это выглядит сразу после запуска (следите за RSS):

ps -C nginx-static -F
UID        PID  PPID  C    SZ  RSS PSR STIME TTY          TIME CMD
mike     32567     1  0   159  296   0 10:18 ?        00:00:00 nginx: master pro
mike     32568 32567  0   203  472   0 10:18 ?        00:00:00 nginx: worker pro

Запускается ab -k -n 5000 http://127.0.0.1:8080/ :

UID        PID  PPID  C    SZ  RSS PSR STIME TTY          TIME CMD
mike     32567     1  0   159  296   0 10:18 ?        00:00:00 nginx: master pro
mike     32568 32567  2   948 3476   0 10:18 ?        00:00:00 nginx: worker pro

Последующие запуски ab с теми же параметрами не увеличивают RSS. Но если увеличить
число запросов, то RSS подскочит еще:
ab -k -n 20000 http://127.0.0.1:8080/ :

UID        PID  PPID  C    SZ  RSS PSR STIME TTY          TIME CMD
mike     32567     1  0   159  296   0 10:18 ?        00:00:00 nginx: master pro
mike     32568 32567  3  3174 12380  0 10:18 ?        00:00:02 nginx: worker pro

error.log при этом пустой.
При запуске того же static бинарника с тем же конфигом на redhat9 с ядром
2.4.20-37.9.legacysmp такого роста RSS не наблюдается. Если убрать параметр -k
(use keepalive) у ab, то роста RSS тоже нет - он остается такой же, какое бы число
запросов я не указывал.
Да, на этом 2.6.7 используется тот же rtsig, т.к. поддержки epoll в glibc 2.2 нет.

Вот вывод pmap после нескольких прогонов ab:
nginx: worker process(32643)
08048000 (556 KB)      r-xp (03:06 1766401)  /usr/local/nginx/sbin/nginx-static
080d3000 (16 KB)       rw-p (03:06 1766401)  /usr/local/nginx/sbin/nginx-static
080d7000 (124 KB)      rwxp (00:00 0)
40000000 (4 KB)        rw-s (00:06 5686732)  /dev/zero
40001000 (11264 KB)    rw-p (00:00 0)
bf475000 (11820 KB)    rwxp (00:00 0)
ffffe000 (4 KB)        ---p (00:00 0)
mapped:   23788 KB writable/private: 23224 KB shared: 4 KB

Ключи сборки:
./configure --without-http_charset_module --without-http_access_module \
  --without-http_userid_module --without-http_autoindex_module  \
  --without-http_proxy_module --without-http_fastcgi_module --with-debug \
  --without-http_rewrite_module --without-http_gzip_module

 + Linux 2.6.7 i686
 + using rt signals

Конфиг:

worker_processes  1;
error_log  logs/tt-error.log;
pid        logs/tt-nginx.pid;
events {
    use rtsig;
    connections  1024;
}
http {
    server {
        listen  8080;
        location / {
                root html;
        }
    }
}

Не похоже на глюк в nginx, но все равно любопытно, что бы это могло быть.





More information about the nginx-ru mailing list