如何禁用 PageCache?

如何禁用 PageCache?

我有一个系统,它收集大量数据,然后偶尔备份数据并将其推送到另一台服务器。我的问题是,虽然数据收集过程占用了 2-3% 的内存,但其余的 RAM 都被 PageCache 填满了,这给我带来了问题。

sysctl -w vm.drop_caches=1

清除内存,我可以设置 chron 作业来立即清除内存,但这似乎不是优雅的解决方案。我宁愿在应用程序使用的 raid 磁盘上完全禁用页面缓存,或者如果这不可能,则在整个服务器上禁用页面缓存。

我试过了此代码启动应用程序,但它对我来说不起作用,页面缓存不断积累。

我在 Ubuntu 服务器 20 上运行该程序

如何禁用硬盘/整个系统上的 PageCache?

更新

以下是随时间推移的免费内容:

>>> free
              total        used        free      shared  buff/cache   available
Mem:        3981820      202180     3600504         852      179136     3565116
Swap:             0           0           0
>>>free
              total        used        free      shared  buff/cache   available
Mem:        3981820      202336     3593204         852      186280     3561364
Swap:             0           0           0
>>>free
              total        used        free      shared  buff/cache   available
Mem:        3981820      203132     3505208         852      273480     3547512
Swap:             0           0           0

Buff/cache 持续增长,直到我刷新内存

>>>sudo lshw -C memory
  *-firmware                
       description: BIOS
       vendor: Amazon EC2
       physical id: 0
       version: 1.0
       date: 10/16/2017
       size: 64KiB
       capacity: 64KiB
       capabilities: pci edd acpi virtualmachine
  *-memory
       description: System memory
       physical id: 1
       size: 4GiB
>>>sysctl vm.swappiness
vm.swappiness = 60

答案1

您无权交换!

$ 免费

              total        used        free      shared  buff/cache   available
Mem:        3981820      202180     3600504         852      179136     3565116
Swap:             0           0           0

让我们创建一个/swapfile...

笔记:命令使用不当dd可能导致数据丢失。建议复制/粘贴。

sudo swapoff -a           # turn off swap
sudo rm -i /swapfile      # remove old /swapfile

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

sudo chmod 600 /swapfile  # set proper file protections
sudo mkswap /swapfile     # init /swapfile
sudo swapon /swapfile     # turn on swap
free -h                   # confirm 4G RAM and 4G swap

确认 /etc/fstab 中的此行...并确认没有其他“交换”行...

/swapfile    none    swap    sw      0   0

reboot                    # reboot and verify operation

更新#1:

我调查了一下这个问题,发现当我接近可用内存限制时,我遇到的问题实际上是程序达到了打开文件限制,所以我最终修复了这个问题。添加/删除交换没有任何区别,运行清理内存的 cronjob 也没有区别。

答案2

安装nocache包:

sudo apt-get install nocache

然后使用 nocache 命令运行您的进程:

nocache whatever

这应该从源头上控制缓存累积问题。

答案3

要禁用写入缓存,请尝试以下操作:

编辑 /etc/hdparm.conf。

取消注释这两行中的第二行,使其看起来像这样:

# -W Disable/enable the IDE drive's write-caching feature
write_cache = off

要启用写缓存:

编辑 /etc/hdparm.conf。

注释掉这两行中的第二行,使其看起来像这样:

# -W Disable/enable the IDE drive's write-caching feature
# write_cache = off

相关内容