Назад | Перейти на главную страницу

Pureftpd - Получение ошибки 421 Недостаточно памяти, когда LimitRecursion превышает 30000


В настоящее время мы работаем на сервере Ubuntu 16.04.3

Это выделенный сервер, и у нас есть полный доступ по SSH и т. Д.

У нас есть каталоги, в которых много файлов (более 50000). Мы хотим, чтобы они были доступны по FTP. Когда мы пытаемся обновить LimitRecursion (значения по умолчанию «2000 8») до «50000 8», у нас возникает ошибка при просмотре этих каталогов через FTP-клиент (Filezilla или WinSCP, та же проблема):

Я не понимаю, как pure-FTPd управляет памятью, и в файле readme я не видел никакой возможности настроить, чтобы я мог отображать все файлы.
Отображение всех файлов в этих папках не является обязательным.

Любая помощь или советы будут очень благодарны.

Я столкнулся с той же проблемой при установке чистого ftpd и после некоторой отладки обнаружил проблему. Существует лимит Linux (максимальный размер сегмента данных процесса), который по умолчанию составляет 16 КБ. Вы можете изменить это ограничение в /etc/security/limits.conf и установить более высокое значение, или запустить ulimit -d unlimited перед запуском pure-ftpd скрипт демона.

К сожалению, это не решает проблему.

pure-ftpd работает как демон, и главный процесс может иметь неограниченный максимальный размер сегмента данных процесса. Тем не мение, pure-ftpd создает дочерние процессы с uid, указанным для каждого пользователя ftp. Эти дочерние процессы не наследуют максимальный размер от своего родителя. Дочерние процессы работают с ограничением 16 КБ и pure-ftpd возвращает ошибку 421 из-за нехватки памяти.

Я пытался изменить /etc/security/limits.conf файл, добавляющий пользователей, настроенных в pure-ftpd, и все еще не работает. Я также пытался добавить строку для всех пользователей (*), но это тоже не работает.

Я нашел способ игнорировать эти ограничения, хотя это не лучшее решение.

Есть параметр ядра (ignore_rlimit_data), что отключает эти ограничения. Вы можете установить это как при загрузке, изменив grub.cfg (зависит от версии linux). Это решение требует перезагрузки системы. Вы также можете изменить этот параметр в работающем Linux, запустив:

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

Это решило проблему, но я хотел бы знать, как заставить чистые дочерние процессы наследовать значения ulimit.