Isilon: Versão 8.0+ WebUI falha com status 500 erro devido FD_SETSIZE erro no Apache2
Resumo: se houver um client fazendo muitas chamadas de API para estabelecer uma sessão com um nó, o número de descritores de arquivo de fluxo em relação ao processo httpd excederá 1024, o que causará problemas com o isi_papi_d ...
Sintomas
A WebUI não pode ser acessada quando você obtém uma "falha no servidor com status 500", como visto abaixo:
e você vê esses erros no /var/log/apache2/webui_httpd_error.log:
2019-05-16T09:12:26Z <18.3> kanagawa-1 httpd[3004]: [:erro] [PID 3004:TID 34678361088] [cliente 1X.8X.1XX.1X1:60831] FastCGI: cabeçalhos incompletos (0 bytes) recebidos do servidor "/usr/sbin/isi_papi_d", referer: https://1X.1XX.1XX.1X8:8080/
2019-05-16T09:12:26Z <18.3> kanagawa-1 httpd[3004]: [:erro] [PID 3004:TID 34678361088] [cliente 1X.8X.1XX.1X1:60831] FastCGI: do_work() falhou com ret 500 para solicitação GET /platform/5/cluster/identity?_dc=1558011363341 HTTP/1.1, referer: https://1X.1XX.1XX.1X8:8080/
Causa
Isso é verificado executando o comando abaixo:
Observe que um dos processos httpd tem uma alta contagem de FD que excede 1024 (observe a coluna 3 da última linha do resultado do processo):
25136
PID COMM FD T V FLAGS REF OFFSET PRO NAME
25136 httpd text v r r------- - - - /usr/local/apache24/bin/httpd
25136 httpd cwd v d r------- - - - /
25136 httpd root v d r------- - - - /
25136 httpd 0 v c r------- 4 0 - /dev/null
25136 httpd 1 v c -w------ 4 0 - /dev/null
25136 httpd 2 v c -w------ 5 0 - /dev/null
25136 httpd 3 s - rw---n-- 4 0 TCP ::.8080 ::.0
25136 httpd 4 s - rw---n-- 4 0 TCP 0.0.0.0:8080 0.0.0.0:0
25136 httpd 5 s - rw---n-- 4 0 TCP ::.8081 ::.0
25136 httpd 6 s - rw---n-- 4 0 TCP 0.0.0.0:8081 0.0.0.0:0
25136 httpd 7 s - rw---n-- 4 0 TCP :: .8082 ::.0
25136 httpd 8 s - rw---n-- 4 0 TCP 0.0.0.0:8082 0.0.0.0:0
25136 httpd 9 s - rw---n-- 4 0 TCP ::.8083 ::.0
25136 httpd 10 s - rw---n-- 4 0 TCP 0.0.0.0:8083 0.0.0.0:0
25136 httpd 11 p - rw------ 5 0 - -
25136 httpd 12 p - rw------ 4 0 - -
25136 httpd 13 v r -w------ 4 0 - /var/apache2/run/mpm-accept-0.25132
25136 httpd 14 s - rw------ 4 0 UDD /var/run/log
25136 httpd 15 v r -w------ 1 0 - /var/apache2/run/proxy.25132
25136 httpd 16 p - rw------ 4 0 - -
25136 httpd 17 v r -w------ 2 0 - /var/apache2/run/proxy.25132
25136 httpd 18 p - rw------ 2 0 - -
25136 httpd 19 v r -w------ 2 0 - /var/apache2/run/rewrite-map.25132
25136 httpd 20 v r -w-----l 1 0 - /var/apache2/run/mpm-accept-0.25132
25136 httpd 21 v r -w------ 1 0 - /var/apache2/run/rewrite-map.25132
25136 httpd 22 k - rw------ 2 0 - -
25136 httpd 23 s - rw---n-- 1 0 TCP sendq:2146 127.0.0.1:8080 127.0.0.1:18720
25136 httpd 24 v c r------- 1 31968 - /dev/random
25136 httpd 25 ? - r------- 1 0 - -
25136 httpd 27 ? - r------- 1 0 - -
.
.
..
25136 httpd 1121 ? - r------- 1 0 - -
Em UNIX e sistemas operacionais de computador relacionados, um descritor de arquivo (FD, menos freqüentemente fildes) é um indicador abstrato usado para acessar um arquivo ou outro recurso de entrada/saída, como um pipe ou soquete de rede. Os descritores de arquivo fazem parte da interface de programação do aplicativo POSIX.
Mais detalhes sobre os diferentes tipos de DFs vistos na saída do procstat podem ser encontrados aqui
Resolução
Se essas mensagens estiverem ocorrendo com muita frequência (várias sessões em um segundo), isso pode facilmente sobrecarregar o servidor Apache2 e impedir que o processo Apache2 se comunique com isi_papi_d serviço devido à indisponibilidade de soquetes FD.
Identifique o client na saída do webui_httpd_access.log e retifique-o do lado do client.
Como solução temporária, reinicie os serviços Apache2 e isi_webui para limpar os DFs.
Solução temporária:
- Desative os serviços:
# isi services -a isi_webui disable
- Verifique se não há processos em execução. Elimine todos os processos em execução:
-
Habilite os serviços novamente:
# isi services -a isi_webui enable
Mais informações
Um gatilho conhecido para esse problema está relacionado ao erro abaixo:
Quando o usuário não tiver incluído nenhum cabeçalho/token CSRF ao tentar estabelecer uma sessão, o client poderá estabelecer uma sessão, mas não fazer log-in no cluster. Isso pode fazer com que o script continue tentando estabelecer uma sessão com o nó, o que pode levar a um alto número de FDs.
A resolução é fazer alterações no client para que sejam compatíveis com as verificações de CSRF. Consulte a parte sobre como implementar a autenticação com proteção CSRF do artigo da base de conhecimento 517421: OneFS: Como proteger seu cluster contra falsificação de solicitação entre locais (CSRF) para obter mais informações (Somente clientes registrados da Dell podem acessar o conteúdo no link do artigo, via Dell.com/support).