NGINX órfãos um semáforo no reinício (4294967295)

4

Toda vez que o NGINX é reiniciado, dois arrays de semáforo são deixados para trás. Os semáforos fornecidos são um recurso compartilhado limitado - o servidor está constantemente se inclinando, embora lentamente, em direção a uma falha no limite de cota.

Os semáforos deixados na reinicialização são de propriedade de "4294967295" (-1) com permissões de 600. Após uma reinicialização, eles não querem ser removidos pelos meios tradicionais, por exemplo:

$ sudo ipcrm -s 5111851  
cannot remove id 5111851 (Operation not permitted)

Alguém já lidou com esse problema antes? Obviamente, seria fantástico encontrar uma maneira de parar o orfanamento dos arrays através de uma configuração NGINX, mas, além disso, eu sou capaz de modificar o script init.d para limpar os arrays de semáforos deixados para trás, eu simplesmente não consigo para removê-los com os utilitários standart ipc *.

Existe uma maneira, a não ser uma reinicialização, de remover essas matrizes de semáforos atribuídas a um usuário inexistente?

$ sudo ipcs -st
------ Semaphore Operation/Change Times --------
semid    owner       last-op   last-changed
...
9568370  4294967295  Not set   Fri Feb 13 03:38:02 2015 <-- logrotate
9601139  4294967295  Not set   Fri Feb 13 03:38:02 2015
9633908  4294967295  Not set   Sat Feb 14 03:31:06 2015
9666677  4294967295  Not set   Sat Feb 14 03:31:06 2015
9764982  4294967295  Not set   Sun Feb 15 03:47:06 2015
9797751  4294967295  Not set   Sun Feb 15 03:47:06 2015
9830520  4294967295  Not set   Mon Feb 16 03:37:02 2015
9863289  4294967295  Not set   Mon Feb 16 03:37:02 2015
9994362  4294967295  Not set   Mon Feb 16 11:34:08 2015 <-- manual restart
10027131 4294967295  Not set   Mon Feb 16 11:34:08 2015
10125436 4294967295  Not set   Mon Feb 16 13:47:25 2015
10158205 4294967295  Not set   Mon Feb 16 13:47:25 2015
10256510 4294967295  Not set   Mon Feb 16 13:52:47 2015
10289279 4294967295  Not set   Mon Feb 16 13:52:47 2015


$ nginx -V
nginx version: nginx/1.6.2
TLS SNI support enabled
configure arguments: 
--prefix=/usr/share/nginx 
--sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf 
--error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log 
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body 
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy 
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi 
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi 
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi 
--pid-path=/var/run/nginx.pid 
--lock-path=/var/lock/subsys/nginx 
--user=nginx 
--group=nginx 
--with-file-aio 
--with-ipv6 
--with-http_ssl_module 
--with-http_spdy_module 
--with-http_realip_module 
--with-http_addition_module 
--with-http_xslt_module 
--with-http_image_filter_module 
--with-http_geoip_module 
--with-http_sub_module 
--with-http_dav_module 
--with-http_flv_module 
--with-http_mp4_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_random_index_module 
--with-http_secure_link_module 
--with-http_degradation_module 
--with-http_stub_status_module 
--with-http_perl_module 
--with-mail 
--with-mail_ssl_module 
--with-pcre --with-debug 
--add-module=/builddir/build/BUILD/nginx-1.6.2/modsecurity-2.8.0/nginx/modsecurity 
--add-module=/builddir/build/BUILD/nginx-1.6.2/ngx_cache_purge-2.1 
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector 
--param=ssp-buffer-size=4 -m64 -mtune=generic' 
--with-ld-opt=-Wl,-E

CentOS 6, NGINX 1.6.2.

    
por pragmar 16.02.2015 / 22:18

2 respostas

2

Você pode querer atualizar para o nginx 1.8 - isso corrigiu o problema dos semáforos vazados para mim (pelo menos à primeira vista)

    
por 17.12.2015 / 15:25
1

Não encontrei a origem do problema, mas aqui está uma solução alternativa.

Em /etc/init.d/nginx , localize a função stop () e adicione a seguinte linha antes de return $retval :

ipcs -s | grep "4294967295" | awk ' { print $2 } ' | xargs -I  % ipcrm -s %

Comessaalteração,sudoservicenginxrestartdeveagoralimparosarraysdesemáforoantigos.

Quetalnãopoderapagarossemáforosemprimeirolugar?Issotinhaavercomficarconfusocomosprivilégiosdesudo,nãoseespalhandopelatotalidadedocomando.Mudarpararootnãoencontroutaisproblemas.

[user@example~]$sudoipcs-s|grep"4294967295" | awk ' { print $2 } ' | xargs -I  % ipcrm -s %
ipcrm: permission denied for id (819214)
ipcrm: permission denied for id (851983)
ipcrm: permission denied for id (1114130)
[user@example ~]$ sudo -i
[root@example ~]# ipcs -s | grep "4294967295" | awk ' { print $2 } ' | xargs -I  % ipcrm -s %
[root@example ~]# 
    
por 17.02.2015 / 22:31

Tags