Skip to content

解决linux内存不足引起的问题

线上linux内存不足导致无法ssh连接

  • 线上linux服务器未配置虚拟内存,之后运行 pnpm i 都会直接卡死

解决方式: 1. 配置虚拟内存 2. 调整内核参数

调整内核参数解决

在 Linux 系统中,可以通过调整内核参数来加快内存回收,从而提高系统的性能和响应速度。以下是一些常用的内核参数及其调整方法:

  1. vm.swappiness vm.swappiness 参数控制系统使用 Swap 的倾向。值越低,系统越倾向于保留内存而不是将数据换出到 Swap。

默认值:60 调整建议: 降低值:如果希望系统尽量减少使用 Swap,可以将 vm.swappiness 设置为较低的值,例如 10 或 20。 提高值:如果希望系统更积极地使用 Swap,可以将 vm.swappiness 设置为较高的值,例如 80 或 100。

# 临时调整
sudo sysctl vm.swappiness=10

# 永久调整(编辑 /etc/sysctl.conf)
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  1. vm.vfs_cache_pressure vm.vfs_cache_pressure 参数控制文件系统缓存的回收压力。值越高,系统越倾向于回收文件系统缓存。

默认值:100 调整建议: 降低值:如果希望系统保留更多的文件系统缓存,可以将 vm.vfs_cache_pressure 设置为较低的值,例如 50。 提高值:如果希望系统更积极地回收文件系统缓存,可以将 vm.vfs_cache_pressure 设置为较高的值,例如 150。

# 临时调整
sudo sysctl vm.vfs_cache_pressure=50

# 永久调整(编辑 /etc/sysctl.conf)
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  1. vm.dirty_ratio 和 vm.dirty_background_ratio 这两个参数控制脏页(未同步到磁盘的缓存数据)的数量。

vm.dirty_ratio:脏页占总内存的最大百分比。超过此值时,系统会开始同步脏页到磁盘。

vm.dirty_background_ratio:脏页占总内存的背景阈值。超过此值时,系统会开始异步同步脏页到磁盘。

默认值:

vm.dirty_ratio:20 vm.dirty_background_ratio:10 调整建议:

降低值:如果希望系统更频繁地同步脏页,可以将这两个值设置为较低的值,例如 10 和 5。 提高值:如果希望系统减少同步频率,可以将这两个值设置为较高的值,但需谨慎,以免影响系统稳定性。

# 临时调整
sudo sysctl vm.dirty_ratio=10
sudo sysctl vm.dirty_background_ratio=5

# 永久调整(编辑 /etc/sysctl.conf)
echo "vm.dirty_ratio=10" | sudo tee -a /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  1. vm.drop_caches vm.drop_caches 参数可以手动清除各种类型的缓存,包括页面缓存、目录项缓存和inode缓存。

值: 1:清除页面缓存 2:清除目录项和inode缓存 3:清除所有缓存

# 清除所有缓存
sudo sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
  1. vm.overcommit_memory 和 vm.overcommit_ratio 这两个参数控制内存过量分配的行为。

vm.overcommit_memory:

0:内核根据可用内存和当前使用情况决定是否允许内存过量分配(默认值)。 1:内核总是允许内存过量分配。 2:内核根据 vm.overcommit_ratio 计算允许的最大内存分配量。 vm.overcommit_ratio:当 vm.overcommit_memory 设置为 2 时,此参数表示允许的最大内存分配量占物理内存的百分比。

默认值:

vm.overcommit_memory:0 vm.overcommit_ratio:50 调整建议:

设置为 2:如果希望严格控制内存分配,可以将 vm.overcommit_memory 设置为 2,并调整 vm.overcommit_ratio。

# 临时调整
sudo sysctl vm.overcommit_memory=2
sudo sysctl vm.overcommit_ratio=70

# 永久调整(编辑 /etc/sysctl.conf)
echo "vm.overcommit_memory=2" | sudo tee -a /etc/sysctl.conf
echo "vm.overcommit_ratio=70" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Comments