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