Pureftpd - Obtendo o erro 421 Sem memória quando LimitRecursion for acima de 30000

1


Estamos atualmente executando um servidor Ubuntu 16.04.3

  • CPU: Intel Xeon E3-1270v6 - 4c / 8t - 3,8 GHz / 4,2 GHz
  • RAM: 64Go DDR4 ECC 2400 MHz
  • HDD: 2 x 1.2 Para nVme SoftRaid

É um servidor dedicado, e nós temos acesso total com SSH, etc.

Temos alguns diretórios que contêm muitos arquivos (mais de 50000). Queremos que eles sejam acessíveis por FTP. Quando tentamos atualizar o LimitRecursion (valores padrão "2000 8") para "50000 8", temos um erro ao navegar pelos diretórios via cliente FTP (Filezilla ou WinSCP, mesmo problema):

  • 421 - Memória insuficiente

Eu não entendo como o FTPd puro está gerenciando a memória, e no arquivo leia-me eu não vi nenhuma opção para ajustar para que eu possa exibir todos os arquivos. O fato de mostrar todos os arquivos dessas pastas não é facultativo.

Qualquer ajuda ou conselhos seria muito apreciada.

    
por H-Joo 29.11.2017 / 11:59

1 resposta

0

Eu enfrentei o mesmo problema em minha instalação do pure-ftpd e depois de alguma depuração eu encontrei o problema. Existe um limite de Linux (o tamanho máximo do segmento de dados de um processo) que é 16k por padrão. Você pode alterar esse limite em /etc/security/limits.conf e definir um valor mais alto ou executar ulimit -d unlimited antes de executar o script pure-ftpd daemon.

Infelizmente, isso não resolve o problema.

pure-ftpd é executado como um daemon, e o processo principal pode ter um tamanho máximo ilimitado do segmento de dados do processo. No entanto, pure-ftpd cria processos filhos com o uid especificado para cada usuário de ftp. Esses processos filhos não herdam o limite de tamanho máximo do pai. Os processos filhos são executados com um limite de 16kb e pure-ftpd retorna erro 421 de memória.

Eu tentei alterar o arquivo /etc/security/limits.conf , adicionando os usuários configurados em pure-ftpd e ainda não funcionando. Eu também tentei adicionar uma linha para todos os usuários (*) e também não funciona.

Eu acho uma solução alternativa para ignorar esses limites, embora não seja a melhor solução.

Existe um parâmetro do kernel ( ignore_rlimit_data ) que desabilita esses limites. Você pode definir isso como na opção de inicialização modificando grub.cfg (depende das versões do Linux). Esta solução precisa de uma reinicialização do sistema. Você também pode alterar essa opção em um Linux em execução:

#echo "Y" > /sys/module/kernel/parameters/ignore_rlimit_data

Isso resolveu o problema, mas eu gostaria de saber como tornar os processos filhos puros herdando valores ulimit.

    
por 08.11.2018 / 07:19