Linux matrix 5.15.2-xanmod1-1 #1 SMP Wed, 17 Nov 2021 02:36:25 +0000 x86_64 GNU/Linux
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 btrfs swap 477dd81e-6a88-4987-b830-47bea1ec1f5d 0 87% /swap
└─sda2 btrfs root 2067df62-8ff6-4b52-9814-e4d5d8cf1577 55.3G 48% /
zram0 [SWAP]
total used free shared buff/cache available
Mem: 1.8Gi 1.2Gi 111Mi 56Mi 557Mi 446Mi
Swap: 5.5Gi 1.6Gi 3.9Gi
vm.swappiness = 10
所以我的问题是,当我的系统处于负载状态时,即如果我在 Firefox 中打开了太多选项卡,或者同时运行 vscode 和 Firefox,我的系统就会变得非常滞后。
然而,当我检查 RAM 使用情况时,它一直停留在 75%,并且永远不会超过这个值。因此还有 25% 的未使用 RAM。
在交换之前如何让它使用更多的内存。
答案1
首先,您假设缓慢是由于 full 造成的RAM
,但这不一定是根本原因。理论上应该还有其他原因和瓶颈会导致速度缓慢,例如大量的I/O
、期望CPU太多processes
等,在确定罪魁祸首是内存之前,您应该首先排除其他原因。您可以使用vmstat
命令,例如:
$ vmstat -w 1
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 120951240 9412 8313416 0 0 0 2 0 0 0 0 100 0 0
0 0 0 120951248 9412 8313416 0 0 0 0 143 210 0 0 100 0 0
0 0 0 120950980 9412 8313416 0 0 0 20 116 238 0 0 100 0 0
0 0 0 120950980 9412 8313416 0 0 0 0 180 315 0 0 100 0 0
0 0 0 120951232 9412 8313416 0 0 0 0 145 285 0 0 100 0 0
如果您在( ) 或( )swap
部分下看到相对较高的数字,则可能表明系统正在将内存页面交换到.如果那里的值很低,则可能还有另一个导致速度缓慢的原因(您可能会在、或下看到)。si
swap in
so
swap out
RAM
swap
procs
io
cpu
假设您确实看到swap in/out
中的值较高vmstat
,则表明瓶颈确实是RAM
被填满。
swappiness
这是来自的描述Linux 内核文档:
交换性
该控制用于定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。值 0 指示内核不要启动交换,直到空闲页面和文件支持页面的数量小于区域中的高水位线。
默认值为 60。
首先,请注意您的swappiness
值 ( 10
) 明显低于默认值 ( 60
)。
假设您firefox
有很多选项卡;其中大多数都处于闲置状态,并且使用率不高。如果swappiness
较低,机器将尝试将数据尽可能保留在 RAM 中,并避免交换出去,直到它真的必须为新页面释放一些内存;这意味着机器只会在需要的时候开始交换,然后可能有点太晚了,在那一刻你会看到一些滞后等待旧的内存页面被换出。
如果swappiness
较高,系统将更频繁地提前换出旧的和空闲的内存页面,为新页面留下更多的可用内存。当您再次访问这些选项卡时,它将在内存中从磁盘分页到 RAM,因此速度可能会更慢,但由于您不经常使用这些选项卡,因此最好将它们保留在交换中,并为新进程保留更多可用内存页面。
我建议增加您的swappiness
,以便更频繁地换出旧的和未使用的内存页面,而不仅仅是在内存达到其限制时。