当前位置: 首页 > news >正文

跑代码过程中遇到 killed 解决策略

目录

一、引言

二、解决

第一步:查看日志,确认问题

第二步:解决方法

第一种:增加交换空间

第二种:调整内存分配策略


一、引言

  • 简要描述问题:在跑代码时,程序突然被终止,命令行提示 "Killed"。

  • 这个问题通常是由于系统内存不足,触发了 Linux 的 OOM Killer 机制。

  • 本文将分享如何通过查看日志、增加交换空间、调整内存分配策略等方法解决这个问题。

二、解决

第一步:查看日志,确认问题

使用dmesg查看系统日志

sudo dmesg | grep -i "killed"

如果有看到 Out of memory  可以确定是内存不足的问题

第二步:解决方法

第一种:增加交换空间

什么是交换空间?

  • 交换空间是磁盘上的一块区域,当物理内存不足时,系统会将部分内存数据转移到交换空间,以腾出物理内存。

  • 虽然交换空间的速度比物理内存慢,但可以避免程序因内存不足而被终止。

如何增加交换空间?

1.创建交换文件 (大小为20G)

sudo fallocate -l 20G /swapfile_new

2.设置权限

sudo chmod 600 /swapfile_new

3.格式化为交换空间

sudo mkswap /swapfile_new

4.启用交换文件

sudo swapon /swapfile_new

5.验证交换空间

sudo swapon --show
free -h

6.永久生效

编辑/etc/fstab文件,添加以下内容

/swapfile_new none swap sw 0 0

【扩展】详细步骤

在编辑之前,最好先备份/etc/fstab文件,以防操作失误导致系统无法启动

sudo cp /etc/fstab /etc/fstab.backup

使用nano文本编辑器打开/etc/fstab文件

sudo nano /etc/fstab

添加文件交换配置(在文末添加)

/swapfile_new none swap sw 0 0

其中

  • /swapfile_new:你创建的交换文件的路径。

  • none:表示没有挂载点。

  • swap:表示文件类型为交换空间。

  • sw:表示挂载选项为 swap

  • 0 0:表示不进行文件系统检查和备份。

验证/etc/fstab文件(检查是否有语法错误)

sudo mount -a

如果没有错误提示,则说明文件编辑成功

第二种:调整内存分配策略

当系统内存不足时,Linux 内核会通过 OOM Killer 终止占用内存最多的进程。为了避免这种情况,可以通过调整内存分配策略来优化系统的内存管理。

具体来说,可以通过修改以下两个内核参数来实现:

  1. vm.overcommit_memory:控制系统的内存分配策略。

  2. vm.overcommit_ratio:定义允许分配的内存总量。

参数说明

vm.overcommit_memory

  • 0(默认值):启发式超额分配。

    • 系统会尝试估算可用内存,并根据一定的策略决定是否允许内存分配。

    • 如果系统认为内存不足,可能会拒绝某些内存分配请求。

  • 1:总是允许超额分配。

    • 系统总是允许内存分配,即使当前内存不足。

    • 这可能会导致系统在内存耗尽时触发 OOM Killer 来终止进程。

  • 2:禁止超额分配。

    • 系统会拒绝超过一定比例的内存分配请求,比例由 overcommit_ratio 决定。

    • 允许分配的内存总量为:物理内存 × overcommit_ratio% + 交换空间

vm.overcommit_ratio

  • 当 vm.overcommit_memory=2 时,定义系统允许分配的内存总量。

  • 默认值通常是 50(即 50%)。

如何调整参数?

临时调整(重启后失效)【建议】

sudo sysctl vm.overcommit_memory=2

sudo sysctl vm.overcommit_ratio=98

注:参数值根据情况进行设定

永久调整(重启后依旧生效)

如果你希望调整后的参数在系统重启后依然生效,可以编辑 /etc/sysctl.conf 文件

打开 /etc/sysctl.conf 文件:

sudo nano /etc/sysctl.conf

在文件末尾添加以下内容:

vm.overcommit_memory=2
vm.overcommit_ratio=98

保存并退出编辑器

运行以下命令使配置生效:

sudo sysctl -p

验证参数是否生效

cat /proc/sys/vm/overcommit_memory
cat /proc/sys/vm/overcommit_ratio

相关文章:

  • 中科大 计算机网络笔记 第二章 2.3WEB和HTTP笔记(更新中)
  • OpenAI 最后一代非推理模型:OpenAI 发布 GPT-4.5预览版
  • 泵吸式激光可燃气体监测仪:快速精准守护燃气管网安全
  • 驱动开发系列41 - Linux 显卡驱动KMD代码分析(二) - 设备电源管理
  • 我代表中国受邀在亚马逊云科技全球云计算大会re:Invent中技术演讲
  • 【Unity】Unity性能分析解决方案——UPR
  • Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法
  • chrome下载文件提示“贵组织屏蔽了该文件,因为它不符合安全政策” 安装chrome插件出现问题
  • el-select的下拉选择框插入el-checkbox
  • 2025年装修装饰施工员考试题型及题目分享
  • 端到端自动驾驶——cnn网络搭建
  • Docker安装Postgres_16数据库
  • L1-031 到底是不是太胖了
  • Redis是什么?如何使用Redis进行缓存操作?
  • 【鸿蒙 NEXT】HarmonyOS 容器
  • CSK linux内网靶场
  • Day33 第八章 贪心算法 part06
  • Spring Boot的启动流程
  • 【软考-架构】2.1、操作系统概述-进程管理-同步互斥
  • gradle libs.versions.toml文件
  • 教育部答澎湃:2025世界数字教育大会将发布系列重磅成果
  • 欧盟公布关税反制清单,瞄准美国飞机、汽车等产品
  • 美英达成贸易协议,美股集体收涨
  • 人民时评:透过上海车展读懂三组密码
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 习近平抵达莫斯科对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典