Android AOSP Ubuntu源码编译电脑卡顿问题定位解决

问题概述

开发SystemUI时,使用内存为16G的主机,Ubuntu 20.04的系统编译SystemUI的源码,编译的过程中发现电脑卡顿,鼠标不能移动。必须重启电脑才可以使用,如果继续编译代码,还是会出现卡顿的问题,严重影响开发效率。

分析问题

发现这个问题的时候,我的第一想法是内存不足,因为我的主机电脑的内存是比较老的,内存只有16G,所以我就准备开始采购内存条。转念一想,不对呀,前几天还能正常编译代码呢,突然不行了只有两个原因,内存条坏了,这点不可能,因为不编译代码,就没有问题,第二个原因,就是大量的CPU被占用了。后面在我的FrameWork同事的提示下发现了问题的真正原因。发现问题的方法也很简单,在编译源码的时候,另外开一个窗口,使用top命令,查看当前的CPU状况,和内存的使用状况。如下图所示:
在这里插入图片描述>上图是编译代码正常时候的情况,如果不正常的情况是,图中的红框内没有交换分区的内存,然后CPU会一直飙升到特别高,我的当时飙升到了1400%多,还出现虚拟内存不足的情况。导致这一问题的原因就是交换分区没有设置。交换分区可以在系统运行内存不足时将一部分未使用的内存文件转存在此分区以减轻动态内存的压力。所以解决这一问题的方法就是设置调整交换分区。

解决问题

问题发现后,我们开始准备配置我们的交换分区:

查看交换分区

首先我们需要先检查下是否启用了交换分区

$ sudo swapon --show   #未启用SWAP分区的话,执行此命令将不会有任何输出

在这里插入图片描述

创建交换分区

如果已经设置成功了就会出现上图中的信息,没有设置的话什么也不输出。
如果没有设置交换分区,则运行下面的命令创建交换分区

 sudo fallocate -l 32G /swapfile      #创建大小依据实际物理内存大小自行调整

需要特别注意的是,这里分配的交换分区的内存不宜太大,建议创建的文件大小为实际物理内存的 2-3 倍,比如我的物理内存是16G,我的这里就设置成32G

创建完成后给swapfile添加权限

$ sudo chmod 600 /swapfile

给完权限后,我们执行下面的命令标注交换分区

sudo mkswap /swapfile

如果已经执行过命令,则会输出下面的信息。
在这里插入图片描述创建完交换分区后,就可以激活分区了

sudo swapon /swapfile

如果已经激活过,运行命令会提示下面的信息
在这里插入图片描述

可以使用下面的命令查看交换分区是否工作:

sudo swapon --show
sudo free -h

命令执行结果如下所示
在这里插入图片描述为了防止交换分区莫名丢失,推荐将创建的交换分区设置为永久分区,将 交换分区路径写入到/etc/fstab文件中

/swapfile swap swap defaults 0 0

删除交换分区

删除交换分区首先需要使用下面的命令停用交换分区:

sudo swapoff -v /swapfile
//启用交换分区使用下面命令
sudo swapon -v /swapfile

然后在/etc/fstab文件中删除交换分区的路径。接着使用下面的命令删除交换分区文件

sudo rm /swapfile

调整交换分区的活跃度

我们可以使用下面的命令查看当前系统设置的 Swappiness 值

cat /proc/sys/vm/swappiness

在这里插入图片描述可以使用下面的命令临时调整这个活跃值,这个活跃值可以设置在0-100,根据环境需求自行调整

sudo sysctl vm.swappiness=60   

我们也可以设置永久性的 活跃值,方法就是编辑/etc/sysctl.conf文件,在文件末尾添加下面的内容:

vm.swappiness=60
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

职场007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值