我使用 less 检查一个相当大的文件(在具有 4GB RAM 的机器上为 8GB)。我告诉它“滚动到末尾”(shift+ G),它运行了一段时间,然后因为耗尽了 RAM 而被终止。我以为less
它不会使用超过有限数量的 RAM,我是否遗漏了什么?
答案1
使用的默认内存量less
取决于它是读取文件还是从管道读取;不清楚从文件读取重定向输入时会发生什么(less < FilePath
而不是less FilePath
)。
以下摘自手册页(在 Ununtu 16.04 上)显示了如何控制less
分配的内存:-
-bn或 --buffers=n
指定每个文件将使用的缓冲区空间量,以千字节(1024 字节)为单位。默认情况下,每个文件使用 64 K 的缓冲区空间(除非文件是管道;请参阅-B选项)。-b选项指定n每个文件应使用 KB 的缓冲区空间。如果n是-1,缓冲区空间不受限制;也就是说,整个文件都可以读入内存。
-B 或 --auto-buffers
默认情况下,当从管道读取数据时,会根据需要自动分配缓冲区。如果从管道读取大量数据,这会导致分配大量内存。-B选项禁用管道缓冲区的自动分配,因此只有 64 K(或由-b选项)用于管道。警告:使用-B可能会导致错误显示,因为只有最近查看的管道数据部分保存在内存中;任何早期的数据都会丢失。
我理解的意思是,当从管道读取时,-b除非-B也是一个选项。如果您希望在每次运行时都指定此项,则将其添加export LESS='-B'
到您的环境中(bash
这将是 中的一行~/.bashrc
)。
请注意,这将限制尝试分配的内存less
,无论内存是由于交换空间不足还是由于 32 位操作系统上的最大 4GB 程序空间而受到限制。