目前我有一台配备 4 GB RAM 的服务器,每 5 分钟运行 2 个 rsyncs 任务(每个 100 GB)和一些监控容器,最终 linux 缓存会占用所有 RAM(rsync 故障),并且如果监控堆栈启动一个新容器,系统会挂起,因为开始交换,因为缓存没有被释放。
通常,内存使用量为 512-700 mb,其他内存都进入缓存,没有释放。有没有办法完全禁用缓存,而不是每 30 分钟左右运行一次“echo 3 > /proc/sys/vm/drop_caches”?
编辑:cat /proc/meminfo
MemTotal: 4026060 kB
MemFree: 530636 kB
MemAvailable: 3245008 kB
Buffers: 1307920 kB
Cached: 215712 kB
SwapCached: 0 kB
Active: 1730668 kB
Inactive: 142704 kB
Active(anon): 347880 kB
Inactive(anon): 1196 kB
Active(file): 1382788 kB
Inactive(file): 141508 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 344 kB
Writeback: 0 kB
AnonPages: 349864 kB
Mapped: 126076 kB
Shmem: 1252 kB
KReclaimable: 1479664 kB
Slab: 1550136 kB
SReclaimable: 1479664 kB
SUnreclaim: 70472 kB
KernelStack: 4256 kB
PageTables: 8500 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2013028 kB
Committed_AS: 1363936 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 10988 kB
VmallocChunk: 0 kB
Percpu: 1384 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 538612 kB
DirectMap2M: 3655680 kB
DirectMap1G: 2097152 kB
答案1
vfs_cache_pressure 是适当的系统参数,用于告诉内核您希望它以多快的速度丢弃缓存。
答案2
不,您不能禁用 Linux 文件系统缓存。RAM 需要花钱和耗电,最好使用它。
请勿/proc/sys/vm/drop_caches
在生产中使用,因为不使用快速 RAM 会使性能变差。它用于调试,例如模拟冷启动以进行存储测试。
需要注意的数字/proc/meminfo
是MemAvailable
,其中包括容易回收的缓存。这应该占 的很大一部分MemTotal
。MemFree
可能非常低,这不是问题。
证明您有用户可见的性能问题。不仅仅是您认为低可用内存很糟糕。向您的应用程序添加响应时间监控,在您通常运行的命令前添加命令前缀来添加秒表time
,或者进行完整的分析,例如使用perf record -- <command>
尽可能确保压力失速信息正在收集。好的 Linux 主机指标监控工具可以收集这些信息,例如 netdata。PSI 量化了因内存而停滞的任务,这比内存使用量更有价值。
并衡量 drop_caches 是否是个好主意。从现在开始获取应用程序性能数据,现状。drop_caches。然后再次测量并量化变化。
深入研究性能可能需要做大量工作,不幸的是这很耗时,但希望具有挑战性和回报。