首页 > 系统相关 >Linux服务器不自动杀死超内存Python程序导致服务器卡死掉线

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

时间:2023-11-13 10:24:34浏览次数:42  
标签:文件 掉线 Python Killer etc 内存 ulimit 进程 服务器

状态: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用户的进程也是生效的。


标签:文件,掉线,Python,Killer,etc,内存,ulimit,进程,服务器
From: https://www.cnblogs.com/lytcreate/p/17828583.html

相关文章

  • pythonDay11
    文件修改的两种方式 函数的定义和调用(无参函数) 有参函数及应用场景(多次调用值:unf,传入不同的参数即可) 空函数及有参函数的应用场景(print()里输入错误,应该是:有参函数应用场景) 调用函数的三种方式  函数返回值的三种方式 ......
  • 图片转Excel的python小工具
    安装软件:pipinstallcvpipinstallpaddlepaddle pipinstallpandas-ihttps://pypi.douban.com/simple pipinstallpaddleocr==2.6.0.2-ihttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallpaddleocr paddleocr-2.7.0.3-py3-none-any.whl 代码: pic2Excel.......
  • python基础
    一、基本语法注释 单行注释# 快捷键command+/ 多行注释"""""" 也可以和变量名结合写多行变量值变量 在python里,变量必须赋值 命名规则: 字母、数字、下划线,不能以数字开头 不要使用python内置关键字 命名规范: 1、见名知意 2、全小写下划线连接检查关键字......
  • python高级
    面向对象高级私有属性和私有方法私有属性和私有方法不能被子类继承,也不能被直接调用在属性、方法前加__就变成了私有属性、私有方法classTest1:__str1='ABCDE'#私有属性def__method1(self):print('这是一个私有方法')defmethod2(self):......
  • Python爬虫 - Scarpy入门学习
    爬虫的分类通用爬虫:通用爬虫是搜索引擎爬虫的重要组成部分,主要是将互联网上的网页下载到本地,再对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。聚焦爬虫:聚焦爬虫是根据指定的需求抓取网络上指定的数据。增量式爬虫:增量式爬虫是用来检测网站数据更新的情况,且可......
  • 如何在 Python 中执行 MySQL 结果限制和分页查询
    PythonMySQL限制结果限制结果数量示例1:获取您自己的Python服务器选择"customers"表中的前5条记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="您的用户名",password="您的密码",database="我的数据库"......
  • 如何在 Python 中执行 MySQL 结果限制和分页查询
    PythonMySQL限制结果限制结果数量示例1:获取您自己的Python服务器选择"customers"表中的前5条记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="您的用户名",password="您的密码",database="我的数据库"......
  • python3使用pymsql操作mysql数据库
    操作系统:Windows10_x64python版本:3.9.2pymysql版本:1.0.2MySQL版本:5.7.38 之前写过一篇关于python操作mysql数据库的文章:https://www.cnblogs.com/MikeZhang/p/pythonOptMysql20170703.html当时是基于python2.7和mysql5.5来整理的,但目前python2.7已经不再维护,主......
  • 怎样用代码处理大数据量数据不会让服务器oom
    处理大数据量时,可以采取一些策略来避免服务器因内存不足而发生OOM(内存溢出)错误。以下是一些常见的处理大数据量的代码技巧和策略:分批处理数据:将大数据集分成小批次进行处理,避免一次性加载全部数据到内存中。可以使用循环迭代数据集的部分,逐步处理每个批次,并在处理完每个批次后及时......
  • python笔记
    python基础来源:b站up“林粒粒呀”《一口气入门Python》1.列表shopping_list=["键盘","鼠标"]#使用append()方法shopping_list.append("显示器")#使用remove()方法(需要删除的元素必须在列表中)shopping_list.remove("鼠标")#列表的索引(从0开始)print(shopping_l......