我们目前正在运行 Ubuntu 16.04.3 服务器
- 中央处理器:英特尔至强 E3-1270v6 - 4c/8t - 3.8GHz /4.2GHz
- 内存:64G DDR4 ECC 2400MHz
- 硬盘:2 x 1.2To SoftRaid nvme
这是一个专用服务器,我们可以通过 SSH 等进行完全访问。
我们有一些目录包含大量文件(超过 50000 个)。我们希望它们可以通过 FTP 访问。当我们尝试将 LimitRecursion(默认值为“2000 8”)更新为“50000 8”时,通过 FTP 客户端(Filezilla 或 WinSCP,同样的问题)浏览这些目录时出现错误:
- 421 - 内存不足
我不明白 pure-FTPd 如何管理内存,在 readme 文件中我没有看到任何可以调整的选项,这样我就可以显示所有文件。
显示这些文件夹的所有文件不是可选的。
如能得到任何帮助或建议我将非常感激。
答案1
我在 pure-ftpd 安装中遇到了同样的问题,经过一些调试后,我发现了问题所在。Linux 有一个限制(进程数据段的最大大小),默认情况下为 16k。您可以更改此限制/etc/security/limits.conf
并设置更高的值,或者ulimit -d unlimited
在运行pure-ftpd
守护程序脚本之前运行。
不幸的是,这并不能解决问题。
pure-ftpd
作为守护进程运行,主进程可能具有不受限制的进程数据段最大大小。但是,pure-ftpd
会创建具有为每个 ftp 用户指定的 uid 的子进程。此子进程不会从其父进程继承最大大小限制。子进程运行时限制为 16kb,并
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 值。