注册

Linux报 “out of memory” 异常的原因以及解决办法

Linux报out of memory(OOM)错误通常是系统内存不足所导致的,但这并不意味着所有这样的错误都是如此。这可能还可能是内存泄漏、错误的使用或其他问题引起的。
在出现OOM错误时,应该采取以下解决办法:

  1. 增加内存:最简单的方法是添加更多的内存,以增加系统对内存的支持。
  2. 减少内存使用:查找和减少可占用的内存使用,特别是那些确保不必要缓存的程序。例如,可以通过清空内存缓存、关闭不需要的服务、卸载不需要的软件等来节省内存。
  3. 调整swap分区:如果内存不足,系统可能会试图使用swap分区,可以增加swap分区的大小或去除swap空间限制。
  4. 调整内核参数:可以完善调整内核参数,以改善系统内存使用效率。例如,可以修改vm.swappiness来调整系统在内存不足情况下对swap空间的使用方式。
  5. 分配更多内存到影响到进程:默认情况下,Linux系统会为每个进程分配一些内存,可以通过调整进程内存限制来避免由大量进程使用过多内存导致系统内存不足的问题。

以下是解决办法示例:

  • 增加内存:
    如果您的服务器中有多个内存插槽,则可以添加更多的内存条。这里需要您确认自己服务器中最多支持多少的内存。
    sudo apt-get install htop
    htop
可以通过安装htop,查看服务器系统内存使用情况。可以查看当前已经使用的内存量和剩余内存量。
  • 减小内存使用:
    可以通过卸载或停止一些暂时不需要的服务或应用程序来释放内存。
    sudo systemctl stop service_name
暂时关闭不必要的服务,停止被占用内存的进程,或者卸载不需要的软件或者是禁止开机启动某些服务等都是非常优秀的方法。
  • 调整swap分区:
    sudo swapoff /dev/sda3
    sudo dd if=/dev/zero of=/dev/sda3 bs=1M
    sudo mkswap /dev/sda3
    sudo swapon /dev/sda3
调整交换空间通常涉及到如上命令来手动配置swap。这里展示了将/dev/sda3作为交换分区并将其大小改为4GB的步骤
  • 调整内核参数:
    可以通过编辑 /etc/sysctl.conf 文件来更改内核参数。
    vm.swappiness=10
这个参数的范围是0-100,较大的值意味着内核更积极地使用swap空间。在这种情况下,将其减小可能会减少oom的风险。
  • 分配更多内存到进程:
    使用cgroups功能可以避免进程滥用,可以将某些进程限制在使用较少的内存范围内。
    sudo apt-get install cgroup-bin
安装cgroups的过程和用法都处理很简单。您可以使用CgClass来控制一个进程组。

这些解决OOM错误的方法都是需要根据实际情况选择,根据具体环境设置适当的参数或参数组合,以便确保系统运行稳定,同时避免OOM错误。