今天在编译安装PHP7.2的时候报出如下错误:

7.2.3/ext/fileinfo/ -DPHP_ATOM_INC -I/usr/local/src/php-7.2.3/include -I/usr/local/src/php-7.2.3/main -I/usr/local/src/php-7.2.3 -I/usr/local/src/php-......
cc: 编译器内部错误:已杀死(程序 cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.

查阅资料后是因为内存不足,物理内存没法增加的情况下可以增加Linux的临时SWAP空间

step1:

[root@VM_115_179_centos ~]# dd if=/dev/zero of=/home/swap bs=64M count=16

该命令创建了一个1G大小的SWAP临时空间,其中参数解释: dd 用于复制文件并对原文件的内容进行转换和格式化处理 if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。 of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。 bs 代表字节为单位的块大小。 count 代表被复制的块数。 /dev/zero 是一个字符设备,会不断返回0值字节(\0)。

块大小可以使用的计量单位表:

单元大小 代码
字节(1B) c
字节(2B) w
块(512B) b
千字节(1024B) k
兆字节(1024KB) M
吉字节(1024MB) G

以上命令执行完毕后会输出内存操作速度:

记录了16+0 的读入 记录了16+0 的写出 1073741824字节(1.1 GB)已复制,31.4932 秒,34.1 MB/秒

step2:

[root@VM_115_179_centos ~]# mkswap /home/swap mkswap: /home/swap: warning: don't erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 1048572 KiB no label, UUID=ff9874a4-7bab-4526-b1ea-e08ba2d986b3

把刚才空间格式化成swap格式

step3:

[root@VM_115_179_centos ~]# sudo swapon /home/swap

使刚才创建的swap空间

step4:

[root@VM_115_179_centos ~]# free -m

查看系统当前SWAP 空间大小

重新编译安装php7.2,顺利完成。用完后关闭swap临时空间执行#swapoff -a命令即可

交换分区

SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用. 它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。 需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存.SWAP分区只是临时的解决办法.

Linux Swap交换分区设置

关于swap交换分区的设置:

一种流行的、以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍。也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间。其实这是严重的浪费。真实的情况是:可以根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区!

首先解释一下什么是交换分区。交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

做一个假设:如果你的内存足够大,极少出现内存不足的情况,那么你就不需要交换分区。事实上,这种可能性是完全存在的。现在的1G内存的电脑不算什么了。动辄4G内存的电脑也日益普遍。日常使用的话,很少能用完全部的内存。在用不完内存容量的情况下,还要划出它两倍的硬盘空间用于内存交换,这不是浪费吗?

可以说,在你内存基本够用的情况下,完全可以不要交换空间。在Windows下也是一样,在系统属性中,把虚拟内存设置为0,系统依然运行的很好。当然,如果你用的是服务器,还是要有专门的虚拟内存,有备无患。但是虚拟内存的大小不一定非要内存的两倍。

那么怎么知道你的系统有没有用到交换空间呢?只需要在root用户下,运行下面的命令就可以知道了。 free -m 在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存。那么,万一有一天你需要了呢,难道要重装系统?大可不必,在Linux下虚拟内存不单可以放在单独的交换分区,也可以是一个在正常分区下的交换文件。

查看swap空间的命令:

[root@VM_115_179_centos ~]# free -m

[root@VM_115_179_centos ~]# vmstat

[root@VM_115_179_centos ~]# top

参考资料:

http://blog.csdn.net/haiross/article/details/19337369

http://blog.csdn.net/qq_32642039/article/details/78070813