没想到在阿里云服务器编译ffmpeg还遇到gcc报错:
internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
百度了之后,知道这是由于内存不足引起的。从阿里云官网得知:
swap的功能与相应内核参数
Linux 将物理内存分为内存段的部分被称作“页面”。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放用于页面的内存。物理内存和交换空间的总大小是可用的虚拟内存的总量。交换空间通常是一个磁盘分区(此分区在安装操作系统时,系统通常会默认划分出一段空间用于交换分区,默认将交换空间的大小设定为内存的1倍到2倍),也可以是一个文件。
内核参数中有一个vm.swappiness参数,此参数代表了内核对于交换空间的喜好(或厌恶)程度。Swappiness 可以有 0 到 100 的值,默认的大小通常是60,但也有的是30。设置这个参数为较低的值会减少内存的交换,从而提升一些系统上的响应度。如果内存较为充裕,则可以将vm.swappiness大小设定为30,如果内存较少,可以设定为60。如果将此数值调整的过大,可能损失内存本来能提供的性能,并增加磁盘IO消耗和CPU的消耗。
关于阿里云云主机swap功能
阿里云提供的云服务器(Elastic Compute Service,简称 ECS),是云主机的一种,当前采用的虚拟化驱动是Xen(这一点可以通过bios vendor和virtual type可以看出)。
默认情况下,阿里云云主机的swap功能是没有启用的,原因当然是通过取消swap功能可以降低磁盘IO的占用率来让用户购买更多的内存、提高磁盘寿命和性能。
阿里当前的做法是:
1.不创建swap分区,由镜像决定
2.将vm.swappiness设定为0,即永不使用swap分区
启用swap分区,确实可以降低内存的使用压力,但并不是长久之计,如果云主机上运行的应用确实需要较高的内存,建议还是购买更多的内存。
所以我们需要把交换分区的功能打开。参看https://blog.csdn.net/qq_35330699/article/details/81223765
查看交换分区
一,创建交换区 swap
1,增加4G 大小的 swap
dd if=/dev/zero of=/var/swap bs=1024 count=4096000
if是指input file,of是output file。dev/zero是linux的一种输入设备,用来创建用于初始化的空文件,如临时交换文件,可以提供任何你需要的数目。 bs指 block size ,单位数据块block,读入/输出的块字节大小为1024 个字节,count=4096000 :数据块(block)数量为4096000 ,即4096000个1024字节(1024字节=1kb)。可以计算swap分区的容量为:4G。(dd命令里的单位M表示1024*1024,k表示1024)
2,创建 swap 文件
mkswap /var/swap
注意 mkswap 和/var/swap 之间有个空格
3,加载这个文件
swapon /var/swap
注意 swapon 和/var/swap 之间有个空格
执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”提示,其实已经激活了,可以忽略,修改权限:
chmod 0600 /var/swap
4,设置系统启动时自动挂载分区
添加到/etc/fstab
echo "/var/swap swap swap defaults 0 0" >> /etc/fstab
5,查看分区大小
free -m
如果打印出 Swap: 0 0 0说明没有分区
二,删除 swap 分区
停止使用的分区
swapoff /var/swap
删除
rm -rf /var/swap
还要再补充:
查看内核参数vm.swappiness中的数值是否为0,如果为0则根据实际需要调整成30或者60
1 2 3 |
|
注:若想永久修改,则编辑/etc/sysctl.conf文件
发现修改后果然好了很多,其他的linux服务器也适合这么干。