使用 pcmanfm 复制大文件时出现“内存不足”错误

使用 pcmanfm 复制大文件时出现“内存不足”错误

这是一台运行基于 Debian 的发行版的旧机器,lxdepcmanfm用作文件管理器。pcmanfm通常运行得很好,除了复制之外非常大文件(例如*.VOB未压缩的 DVD 中的文件)。好吧,实际上我以为它会用我的交换(设置为 3.5 GB)但不幸的是交换总是显示大约12MB
也是如此pcmanfm 忽略交换文件?不幸的是,这台机器的一个 RAM 模块出现错误,我不得不将其删除。所以我目前的物理 RAM 只剩下 1 GB 了:(。不过,如果正确解决了交换问题,这应该不重要!

示例来自syslog

[40398.719466] Out of memory: Kill process 21573 (compiz) score 2 or sacrifice child

相反,需要最多资源的进程会被内核杀死,巧合的是,这取决于它接下来掌握的内容(通常等compizdbus

有没有办法“告诉”pcmanfm 使用交换空间?

答案1

我会尝试回答你一个更通用的问题:

有没有办法“告诉”进程使用交换空间?

Linux内核提供了通过/进程/系统接口一个属性,它定义内存页面(仅限匿名!)交换到磁盘的积极程度。

虚拟机交换性属性按系统全局应用,但不按进程全局应用。设置该值低的如果你想尽可能避免交换。如果您的系统进程休眠很长时间,您可能会通过增加此值来受益于积极的交换行为。此全局属性可作为工具使用/proc/sys/vm/swappiness并可通过sysctl工具进行调整。

随着内核 2.6.24 的引入cgroups,可以使其更加细化 记忆子系统。假设您有一个可用的 cgroup 层次结构记忆附加子系统 ( /cgroups/mem) 和 cgroup ( /cgroups/mem/your_cgroup),并定义了任务/进程 ( /cgroups/mem/your_cgroup/tasks)。然后,你可以改变交换性这组任务的行为如下:

cd /cgroups/mem/your_cgroup
echo 90 > memory.swappiness

如何自动将进程分配给该cgroup?我会在/etc/cgrules.conf文件中创建一个简单的规则

your_user:pcmanfm   memory  /your_cgroup

然后,cgroup 规则引擎守护进程(服务)使用此文件cgred进行自动进程分类。

欲了解更多详情,请查看Linux 内核 cgroup 文档

答案2

当我用第二个显示器启动计算机(笔记本电脑)时,我在 Lubuntu 14.04 上遇到了同样的问题。

解决方法是在计算机启动时自动关闭第二个显示器(在 /home/user/.config/lxsession/Lubuntu 中的自动启动文件中) - 我使用 xrandr --output VGA1 --off 因为我使用的是 vga 显示器用于我的第二次展示。

然后我运行一个桌面文件,然后调用一个 bash 文件(可能有点过分),它按照我想要的方式设置 xrandr 。

我认为关键是您必须先使用一个显示器(您的主显示器),然后启动第二个显示器。当我这样做时,它会正确使用桌面映像文件,并且我的 pcmanfm cpu% 永远不会变高。

菲尔

相关内容