Linux服务器不自动杀死超内存Python程序导致服务器卡死掉线

状态:Python处理大数据时,内存占用超过服务器可用内存,但是服务器并没有杀死该进程,而是被卡死无法通过ssh进入

解决方向:

一、设置系统内存限制:

使用 ulimit -a 查看系统参数

ulimit -a 命令的结果中会显示各种资源的限制参数。以下是一些常见参数及其含义:

  1. core file size (ulimit -c): 该参数表示核心文件大小的上限。核心文件是在进程崩溃时生成的文件,其中包含了进程崩溃时的内存信息。
  2. data seg size (ulimit -d): 数据段大小的上限。
  3. file descriptors (ulimit -n): 表示一个进程可以打开的文件描述符的最大数量。文件描述符是进程访问文件和套接字的索引。
  4. max locked memory (ulimit -l): 该参数表示一个进程可以锁定的物理内存的最大量。
  5. max memory size (ulimit -v): 该参数是进程可以使用的最大虚拟内存量。
  6. open files (ulimit -u): 一个用户可以同时打开的最大文件数。
  7. stack size (ulimit -s): 该参数表示进程栈的最大大小。
  8. cpu time (ulimit -t): 表示进程可以使用的最大CPU时间。
  9. max user processes (ulimit -u): 表示一个用户可以同时运行的最大进程数。

这些限制是为了防止用户进程占用过多系统资源而设置的。通过ulimit命令,管理员可以对这些限制进行调整以优化系统性能和资源利用。需要注意的是,这些限制的保护措施通常只适用于普通用户进程,对于超级用户(root)进程,这些限制往往没有约束力。

设置最大内存使用量:

例如,要设置最大内存限制为1GB,可以执行以下命令:

ulimit -v 1024000

ulimit命令设置的内存限制仅对当前终端会话中的进程有效,重启终端后会重置为默认值。

另一种方法是在Python代码中使用resource模块来设置最大内存限制。可以在代码中添加以下内容:

import resource # 设置最大内存限制为1GB

resource.setrlimit(resource.RLIMIT_AS, (1024 * 1024 * 1024, 1024 * 1024 * 1024))

使ulimit命令的设置永久生效,需要对系统配置文件进行修改。具体步骤如下:

  1. 编辑/etc/profile文件:使用文本编辑器(如vi、nano等)打开/etc/profile文件。
  2. 添加ulimit命令:在/etc/profile文件的末尾添加你想要的ulimit命令。例如,要永久设置最大内存限制为1GB,可以添加以下行:

ulimit -v 1024000

  1. 保存并关闭文件:保存对/etc/profile文件的修改,并关闭文本编辑器。
  2. 使设置生效:执行以下命令以使/etc/profile文件中的设置生效:

source /etc/profile

或者,你也可以重新启动系统,这将自动加载新的配置。

 

二、激活OOM Killer功能

查看功能状态,结果为1表示已激活,结果为0表示未激活

cat /proc/sys/vm/oom_kill_allocating_task

要激活OOM Killer,你可以通过修改内核参数来实现。你可以执行以下步骤来激活OOM Killer:

  1. 打开终端并以管理员身份登录到Linux系统。

  2. 编辑 /etc/sysctl.conf 文件。你可以使用文本编辑器(如vi、nano等)打开该文件
    vi /etc/sysctl.conf

  3. 在文件中添加或修改以下行
    vm.oom_kill_allocating_task=1
  4. 这将把 oom_kill_allocating_task 参数设置为1,以激活OOM Killer。 保存并关闭文件。在vi编辑器中,按下Esc键退出编辑模式,然后输入 :wq 保存修改并退出。
  5. 加载新的内核参数。执行以下命令,使修改生效:
    sudo sysctl -p

    这将重新加载 /etc/sysctl.conf 文件中的内核参数。

    完成上述步骤后,OOM Killer应该被激活了。当系统内存不足时,OOM Killer将会根据需要杀死进程以回收内存。请记住,在使用OOM Killer时要小心,并确保理解其工作原理和潜在风险。

    OOM Killer对root用户的进程也是生效的。


posted @   lytcreate  阅读(225)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示