我的 Mint 18.1 系统经常由于内存不足而冻结大约 10 分钟,根据一个小部件显示冻结时内存使用率为 100%。系统请求 + "饲养瘦弱的大象非常无聊“组合不起作用。
我尝试将交换优先级设置为-1,但这并不能解决冻结问题。
我的交换分区几乎没有被使用,即使在高负载和vm.swappiness=100
使用 95% 以上的 RAM 时也是如此。强制增加交换空间的使用是否可以解决冻结问题?如果可以,我如何强制增加交换空间的使用?
->free -m
total used free shared buff/cache available
Mem: 15874 12243 412 1255 3218 1724
Swap: 16207 5 16201
->swapon -s
Filename Type Size Used Priority
/dev/dm-3 partition 16596476 6068 -1
我的系统:
NAME="Linux Mint"
VERSION="18.1 (Sonya)"
答案1
显然,你这里有两个问题。
REISUB 序列不工作可能是由于 magic SysRq 未激活造成的 - 检查一下
cat /proc/sys/kernel/sysrq
# List of possible values in /proc/sys/kernel/sysrq:
# 0 - disable sysrq completely
# 1 - enable all functions of sysrq
# >1 - bitmask of allowed sysrq functions (see below for detailed function description):
# 2 - enable control of console logging level
# 4 - enable control of keyboard (SAK, unraw)
# 8 - enable debugging dumps of processes etc.
# 16 - enable sync command
# 32 - enable remount read-only
# 64 - enable signalling of processes (term, kill, oom-kill)
# 128 - allow reboot/poweroff
# 256 - allow nicing of all RT tasks
对于经典 REISUB,您需要 4 (R) + 64 (E,I) + 16 (S) + 32 (U) + 128 (B) = 244 (效果与瘦象版本相同;作为助记符,它是BUSIER 倒着拼写)。
对于系统的交换性:它按预期工作。该行为的原因是您使用了大量内存 - 这可能是您获得的 95% - 并且然后某物别的正在请求大量新 RAM,迫使 95% 的大部分进行交换并一路战斗。
你能做的最好的事情就是安装更多的内存。否则,看看您是否可以驯服小进程,使其达到 95%,或者大进程进一步消耗 40-50%。该top
实用程序可能会帮助您。
作为一个奇特的解决方案,您可以增加明显的交换性,并通过一些监视系统的进程来“削减”小鱼,如果大猪没有运行并且内存占用太大,则开始分配和释放大量内存- 比如说,所有剩余内存加上 64M,强制将 64M 的小内存放入缓存,然后 +128M,依此类推,直到分配延迟超出给定的时间阈值或大内存开始运行。
这个答案如果您真的想这样做,可以给您一个良好的开始。
答案2
简而言之,交换不会帮助你,解决这个问题最有效的方法是扩大记忆如果你保持系统环境不变。
现在回答你刚才提到的问题。
1. 为什么“vm.swappiness=100”内存没有换出?
首先,您应该了解 Linux 中的 swap 是如何工作的。当内核感觉内存不足时,有两种方法可以回收内存来缓解这种情况。
- 交换匿名页面
- 回收缓存页面
'vm.swappiness' 只是控制内核交换内存页面的积极程度(交换更多匿名页面或回收更多缓存页面)
那么,又来了一个问题,内核如何确定要交换哪个匿名页呢?策略比较复杂,可以参考代码这里根据你的内核版本。用一句话概括策略,交换最不活动的页面。如果没有内核认为可以交换的非活动页面怎么办?
这就是为什么您的系统没有换出您想象的那么多内存的原因。
2. 强制内存交换有帮助吗?
不。并且没有通用的方法来强制交换内存,内核接管它。
答案3
如果系统是笔记本电脑,则其键盘系统请求钥匙可能无法工作,除非有额外的功能键,(其作用类似于转移键),被按下。
每当一个应用程序(或一组应用程序)占用超过 16GB RAM 时,通常最好找到一个不太臃肿的应用程序。