嵌入式板卡内存不足时的临时解决方法

前言

本文记录基于linux系统进行测试时出现物理内存不足,使用交换分区临时解决使进程得以继续执行;

一、问题现象

[ 1727.555786] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,task=sgcc_base.mytes,pid=752,uid=0
[ 1727.566788] Out of memory: Killed process 752 (sgcc_base.mytes) total-vm:4759208kB, anon-rss:4729924kB, file-rss:1340kB, shmem-rss:0kB, UID:0 pgtables:9356kB oom_score_adj:0

运行一个程序提示内存不足;

二、解决方法

我们在非易失性存储器中创建一段交换,可能是EMMC, NAND等存储设备,本人使用的为EMMC有几十G大小,创建了几个分区并进行了挂在,如下:

root@vmachine:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       2.0G  701M  1.2G  39% /
/dev/mmcblk0p1  115M   58M   49M  55% /boot
/dev/mmcblk0p2  974M   24K  907M   1% /mnt1
/dev/mmcblk0p3  974M   24K  907M   1% /mnt2
/dev/mmcblk0p5   53G   29G   22G  57% /mnt3

我们选最大的分区挂载目录,在其中创建交换分区:
cd /mnt3
sudo dd if=/dev/zero of=swapfile bs=1M count=4096
sudo mkswap swapfile
swapon swapfile
sudo chmod 600 swapfile
sudo chown root:root swapfile

查看创建情况:
free会显示 Swap的分配和使用情况

三、优缺点

原理:交换分区的原理为当内存不足时,会触发内存警戒,内核的内存管理机制会检查如果设置了交换分区,会将内存中暂时不用的数据放到非易失性存储器中从而释放一部分内存;
缺点:如果换出去的数据随后又继续被程序需要会被再次从非易失性存储器调回内存,涉及到数据的备份、恢复等处理,会耗费时间;
优点:为了验证某个功能的整体功能在内存不足又想节省时间不去重新更新硬件配置时,可以先考虑此方法;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值