0xzhang的博客

Swap分区不足

· 0xzhang

collect2: ld terminated with signal 9

同事在VirtualBox虚拟机中编译链接程序,最后链接过程中,报出标题这样的错误信息。

没有见过这样的错误信息,在网上查了下。大概能够确定是虚拟内存空间不足导致此链接错误,是内存不够用了,增加内存应该可以解决问题。这里通过新建swap分区解决。

管理swap分区§

# 查看系统空闲和使用中的内存,单位MB,其中包含swap内存
$ free -m
# 显式设备的swap使用统计
$ swapon -s
# 查看swap信息
$ cat /proc/swaps

两种解决方案

  1. 增加swap文件

    # 创建4GB的交换文件
    $ sudo dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096
    # 也可以这样写
    $ sudo dd if=/dev/zero of=/tmp/mem.swap bs=1024 count=4096
    # 转换格式
    $ sudo mkswap /tmp/mem.swap
    # 挂载swap分区
    $ sudo swapon /tmp/mem.swap
    # 卸载swap分区
    $ sudo swapoff /tmp/mem.swap
    
    # 这种方法在重启后swap文件大小会改变回去
    # 需要在/etc/fstab文件中添加对应的配置信息,以持久化变更
    /tmp/mem.swap             swap                    swap    defaults        0 0
    
  2. 通过fdisk增加swap分区

    # 新增分区,需要磁盘有剩余空间
    $ sudo fdisk  /dev/sda
    Command (m for help): n
    # 格式化swap分区并挂载
    $ sudo mkswap /dev/sda4
    $ sudo swapon /dev/swap
    # 与swap文件设置相同,在/etc/fstab文件中添加对应的配置信息
    /dev/sda4             swap                    swap    defaults        0 0
    

问题原因§

查看该虚拟机分配的内存有4G。

不过此程序之前都可以编译链接通过。

查看机器上内存占用情况,CLion的java进程占用超过1G多。

同事也是最近才开始用CLion,因此以往编译链接没有出现过问题。

参考资料§

  1. Ubuntu增加swap交换空间的步骤_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)
  2. Linux下增加交换分区的大小 - 运维之路 (361way.com)