这是一台运行基于 Debian 的发行版的旧机器,lxde
并pcmanfm
用作文件管理器。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
相反,需要最多资源的进程会被内核杀死,巧合的是,这取决于它接下来掌握的内容(通常等compiz
)dbus
有没有办法“告诉”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% 永远不会变高。
菲尔