Добрый день.
Обнаружил какие-то странности в 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, но все равно любопытно, что бы это могло быть.