Max*_*ann 12 ubuntu memory out-of-memory
每当我重新启动我的笔记本电脑时,一切都运行得惊人,而且我的内存使用率最高为 40%(超过 8GB)。然而,随着时间的推移(使用约 1 天),内存使用率上升到 90% 以上,并且系统开始交换。
现在,free -mh
返回这个:
total used free shared buff/cache available
Mem: 7,7G 1,3G 141M 223M 6,3G 246M
Swap: 7,5G 530M 6,9G
Run Code Online (Sandbox Code Playgroud)
我假设如果进程需要,可以自由地重新分配 buff/缓存内存,但它似乎大多不可用。
cat /proc/meminfo
:
MemTotal: 8055268 kB
MemFree: 145184 kB
MemAvailable: 247984 kB
Buffers: 49092 kB
Cached: 423724 kB
SwapCached: 38652 kB
Active: 881184 kB
Inactive: 791552 kB
Active(anon): 708420 kB
Inactive(anon): 725564 kB
Active(file): 172764 kB
Inactive(file): 65988 kB
Unevictable: 252 kB
Mlocked: 252 kB
SwapTotal: 7812092 kB
SwapFree: 7267624 kB
Dirty: 352 kB
Writeback: 0 kB
AnonPages: 1195320 kB
Mapped: 235860 kB
Shmem: 234068 kB
Slab: 6117796 kB
SReclaimable: 167260 kB
SUnreclaim: 5950536 kB
KernelStack: 10352 kB
PageTables: 30312 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 11839724 kB
Committed_AS: 6410728 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 104448 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 1361472 kB
DirectMap2M: 5859328 kB
DirectMap1G: 1048576 kB
Run Code Online (Sandbox Code Playgroud)
我发现这些值特别有趣,因为它们与来自 的 buff/缓存使用有很大关系free
,但我不知道如何处理它们或下一步该往哪里看:
SReclaimable: 167260 kB
SUnreclaim: 5950536 kB
Slab: 6117796 kB
Run Code Online (Sandbox Code Playgroud)
我接下来可以在哪里看?什么是平板,有没有办法减少它的内存使用量?
maz*_*azs 10
您应该检查top
某些东西是否确实在使用您的 RAM,按内存使用情况排序,或检查系统监视器中的内存使用情况。
Linux 将借用未使用的内存用于磁盘缓存。这使得看起来您的内存不足,但实际上并非如此。查看此网页以获取更多解释:https : //www.linuxatemyram.com/
在发布的示例中,您实际上有大约 6.5Gb 未使用的内存。您还可以看到交换量非常低(540Mb)。
您可以按照此处的说明释放缓存,然后free
将在可用字段中显示可用内存:
释放页面缓存:
# echo 1 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
释放 dentry 和 inode:
# echo 2 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
要释放页面缓存、dentries 和 inode:
# echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
或使用此命令:
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
Run Code Online (Sandbox Code Playgroud)
关于Slab:
Slab、SReclaimable、SUnreclaim
内核在运行的时候做了很多重复。某些对象,例如请求文件的特定 inode 可能每天执行数千次。在这种情况下,最好将其存储在快速参考列表或缓存中。Slab 是内核对象的缓存,用于优化那些最常发生的活动。
Slab 字段是 SReclaimable 和 SUnreclaim 的总和。
尝试对使用 Slab SUnreclaim 内存量的原因进行故障排除slabtop
。
以上旨在以root身份运行。