编译百度Apollo6.0时发现的swap分区的重大作用
一、前言
- 我是安装的win11和ubuntu18双系统,安装ubuntu的时候采用与win共存的方式,所以就没有自动手动分区,包括没有分swap分区。
- 我是amd r7 5800h的cpu和3060的显卡,16g的内存,理论上安装Apollo是没有问题的,但是在编译的时候总是出现out of memory的报错,然后给我其他进程给我kill了。
- 我很无解,用了网上比如退出桌面用无图形终端的方式编译,kill掉无关紧要的进程等等方法都不可以。
二、安装Apollo教程
参考链接:可能是知乎上已知最详细的Apollo6.0安装教程
按照上面这个过程安装到编译源码的部分时,16G的内存不足以支撑整个build,需要增加swap space改变swap分区大小
linux中默认物理内存使用40%的时候就开始使用swap分区虚拟内存:
可以通过这篇文章修改:linux系统swappiness参数在内存与交换分区间优化
三、什么是swap分区
- swap分区,即交换区,swap空间的作用可简单描述为:**当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。**那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。
- swap配置对性能的影响:Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。但是分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。
- 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程)如果系统物理内存不够用,网站打开会很慢,ping可能会丢包,延迟很大;**如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。**因此Swap空间的分配是很重要的。
四、swap分区的划分规则
- 在linux中,我们对swap分区的划分有一定的规则,当物理内存小于2G时,swap分区大小为物理内存的2倍;超过2G的部分,swap分区大小跟物理内存相等。
公式如下:x代表物理内存,y代表swap分区
当x<2G 时,y=2x;
当x>=32G 时,y<=x;
例:当物理内存为4G的时候,swap为6G;当物理内存大于32G的时候,swap分区小于等于物理内存比较好。
附:规则不是一成不变的,所谓swap分区的划分没必要太过于死板,这里所说的规则仅供参考。
五、内存的查看
- free命令
free -m #-m已兆为单位查看
例如:
hhl@hehuiling:~$ free -m
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 15425 4318 4109 316 6998 10471
交换: 16383 0 16383
- swapon命令
```powershell
swapon -s #查看swap的状态,已用和未用资源的大小。
- top命令
top #动态查看,但是使用top命令时资源消耗比较大