nginx iptv http proxy - memory leaks
Igor Sysoev
igor на sysoev.ru
Чт Июн 17 14:24:47 MSD 2010
On Thu, Jun 17, 2010 at 07:57:14AM +0300, Dobrozhansky Sergey wrote:
> Добрый день.
>
> Столкнулся с проблемой утечки памяти.
>
> Имеется иптв сервер, раздающий поток по http.
> OC:
> - FreeBSD 7.3-RELEASE-p1 i386
> - FreeBSD 8.0-RELEASE-p3 i386.
>
> В сервер приходят мультикаст потоки, которые с помощью udpxy
> перегоняются в http.
>
> Nginx выступает в роли фронтенда.
>
> За пару часов его работы он может забрать порядка гигабайта памяти.
>
> 2692 www 1 4 0 258M 244M kqread 5 5:59 3.37% nginx
> 2691 www 1 4 0 18484K 5124K kqread 2 4:25 0.00% nginx
> 2693 www 1 4 0 166M 151M kqread 4 3:34 0.00% nginx
> 2690 www 1 4 0 119M 105M kqread 0 3:09 0.00% nginx
>
> Версии пробовались:
> - nginx/0.8.41
> - nginx/0.7.67
> - nginx/0.7.66
>
> Результат одинаковый.
>
> Конфиг:
>
> user www;
> worker_processes 4;
>
> events {
> worker_connections 2048;
> use kqueue;
> }
>
> http {
> limit_zone one $binary_remote_addr 10m;
>
> sendfile on;
> tcp_nopush on;
> tcp_nodelay on;
>
> keepalive_timeout 5;
> reset_timedout_connection on;
>
> proxy_buffering off;
>
> server_tokens off;
>
> log_format main '$remote_addr - $remote_user
> [$time_local] $status '
> '"$request" $body_bytes_sent
> "$http_referer" '
> '"$http_user_agent" "http_x_forwarded_for"';
>
> access_log /var/log/nginx.log main;
>
>
> client_header_timeout 3m;
> client_body_timeout 3m;
> send_timeout 3m;
>
> server {
> listen 4025;
> server_name localhost;
>
> limit_conn one 5;
>
> access_log /var/log/nginx.log main;
>
>
> if ($http_user_agent !~* (^MPlayer*|^VLC*|^NSPlayer*|^RealtekVOD*)) {
> return 444;
> }
>
> location / {
> proxy_pass http://127.0.0.1:4026/;
> proxy_redirect off;
>
>
> client_max_body_size 10m;
> client_body_buffer_size 128k;
>
>
> proxy_connect_timeout 90;
> proxy_send_timeout 90;
> proxy_read_timeout 90;
>
> allow 192.168.160.0/19;
> allow 192.168.128.0/24;
> deny all;
>
>
> rewrite ^/watch/iptv2$ /watch/224.5.5.2:1234;
> rewrite ^/watch/iptv3$ /watch/224.5.5.3:1234;
> rewrite ^/watch/iptv4$ /watch/224.5.5.4:1234;
> rewrite ^/watch/iptv5$ /watch/224.5.5.5:1234;
> rewrite ^/watch/iptv6$ /watch/224.5.5.6:1234;
> rewrite ^/watch/iptv7$ /watch/224.5.5.7:1234;
> rewrite ^/watch/iptv8$ /watch/224.5.5.8:1234;
> rewrite ^/watch/iptv9$ /watch/224.5.5.9:1234;
> rewrite ^/watch/iptv10$ /watch/224.5.5.10:1234;
>
> }
>
> }
> }
Кстати, это лучше переписать так:
if ($http_user_agent !~* (^MPlayer*|^VLC*|^NSPlayer*|^RealtekVOD*)) {
return 444;
}
allow 192.168.160.0/19;
allow 192.168.128.0/24;
deny all;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
location / {
proxy_pass http://127.0.0.1:4026/;
}
location = /watch/iptv2 {
proxy_pass http://127.0.0.1:4026/watch/224.5.5.2:1234;
}
location = /watch/iptv3 {
proxy_pass http://127.0.0.1:4026/watch/224.5.5.3:1234;
}
...
--
Игорь Сысоев
http://sysoev.ru
Подробная информация о списке рассылки nginx-ru