WSL2遇到内存不足OOM的解决方法

2024 / 4 / 1

  • 增大WSL分配内存

    编辑C:/Users/Accoutname.wslconfig,写入:

    [wsl2] processors=16 memory=32GB swap=8GB
  • 配置内存策略

    sysctl vm.overcommit_memory=2这个命令用于配置Linux内核的内存过量使用策略。

    vm.overcommit_memory是一个内核参数,它控制着内核对内存分配的策略。这个参数可以设置为以下三个值:

    1. 0 - 内核将检查是否有足够的可用内存空间。如果有足够的可用内存,才允许分配请求;否则,内核拒绝分配内存。这是最严格的设置。

    2. 1 - 内核根据交换空间的总大小来决定是否同意一次内存申请。如果有足够的交换区支持,内核会允许分配内存,即便当前的可用内存空间不足。

    3. 2 - 内核允许分配所有的内存请求,即不会过多检查是否还有足够的可用内存空间。这是最宽松的设置,可能导致系统过度使用swap分区,进而影响系统性能。

    因此,sysctl vm.overcommit_memory=2的作用是设置内核为最宽松的内存过量使用策略,允许尽可能最大化利用内存,但可能会导致频繁使用swap分区,影响性能。这种设置一般用于某些对内存使用非常大的应用程序场景。

    通常情况下,保持默认值0或将其设置为1是比较合理的,能在一定程度上防止内存耗尽的情况发生。