Ubuntu Swap交换区满问题解法

有时用vscode打开比较大的工作目录,用一会儿机器会突然卡顿,鼠标都移动不了,但是查看系统资源会发现cpu全是空闲的,mem占用也不到50%,但是swap几乎处于打满状态。

一、原因分析

之前遇到过几次这个问题,改为打开单个项目目录就好了。今天在一个小项目编译时再次遇到机器卡死的问题,现象跟上边相同,最终查看mem/swap是被一批叫cpptools、cpptools-srv的进程占用,将近6个G左右。并行编译和产出的cp也会占用大量swap。

查询后发现,这是vscode的一个插件./vscode/extensions/ms-vscode.cpptools-1.16.3-linux-x64/bin/cpptools,其实就是vscode推荐的微软官方C/C++插件。这个插件有很多好用的功能,类似一键跳转到定义/声明位置、查找所有引用等。而问题就出在这里的智能感知缓存功能上C_Cpp.intelliSense,它为了实现快速的错误检测、代码提示、引用关系跳转等,会对代码进行分析和缓存,从而占用机器资源。

二、解决方法

1.禁用微软C/C++插件

简单粗暴的方法,可以直接禁用此插件。效果立竿见影,但是也确实会带来不便,比如想查找定义/引用很不方便。

2.加大系统Swap大小

在16核CPU+16G内存的电脑上,不应该出现这么低级的卡顿问题,究其根因,其实是因为Swap交换空间太小导致的。

正常情况下,Swap交换空间最好为物理内存的1-1.5倍,才能有充足的空间用于存贮被交换下来的内存,而Ubuntu在默认安装时,只分配了2G Swap空间,这里我们选择直接加大Swap空间大小。

# 查看swap大小(ubuntu默认Swap为2G,但是物理内存为16G,swap太小)
free -m
              total        used        free      shared  buff/cache   available
       Mem:   15770        1521         890         333       13358       13579
       Swap:   2047        1009        1038

# 查看swap分区挂载位置(/swapfile)
cat /proc/swaps
       Filename		Type		Size		Used		Priority
       /swapfile        file		2097148		1025792		-2

# 停止交换分区
sudo swapoff /swapfile

# 检查停止状态
cat /proc/swaps

# 删除分区文件
sudo rm /swapfile

# 建立swap文件(这里跟物理内存保持一致为16G)
sudo dd if=/dev/zero of=/swapfile bs=1024 count=16000000

# 使用新分区
sudo chmod 600 /swapfile
sudo mkswap -f /swapfile
       Setting up swapspace version 1, size = 15.3 GiB (16383995904 bytes)
       no label, UUID=9b592b83-bfbb-4bfb-8ca1-b4e479759a6d
sudo swapon /swapfile

# 查看swap大小(变为16G)
free -m
             total        used        free        shared        buff/cache        available
       Mem:  15770        2613        176        668        12980        12156
       Swap: 15624        0           15624
cat /proc/swaps
       Filename           Type       Size           Used       Priority
       /swapfile          file       15999996       256       -2
# 永久生效交换分区
vim /etc/fstab
       /swapfile none swap sw 0 0

调大Swap后,C/C++插件也可以打开了,再也没遇到卡顿问题了。

 

yan 23.7.18

 

参考:

https://blog.csdn.net/qq_34160841/article/details/104856865

欢迎关注下方“非著名资深码农“公众号进行交流~

发表评论

邮箱地址不会被公开。