处理Linux-x86_64 Error: 12: Cannot allocate memory

今天在连接数据库的时候,发现报错了,经检查发现好像是Swap区太小造成宕机,这里写下swap去扩充的教程记录一下

报错现象

1
2
3
4
5
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
Additional information: 1
Additional information: 32768
Additional information: 8

解决方案

查看目前swap区的使用情况

查询发现几乎用满了,但是着急弄数据库,就先加一块swap区域

1
2
3
[root@xydtech dev]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 16777212 14815480 -2

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1. 新建一个swap文件,并添加权限,这个命令说明下,里面的count好像是块的个数,bs好像是每个块的大小,最终扩充的swap的大小就等于count*bs,一定要注意修改成自己需要扩充的大小
[root@xxxx dev]# dd if=/dev/zero of=/swapfile count=16384 bs=1MiB

2. 添加新建的swap文件的权限
[root@xxxx dev]# chmod 600 /swapfile

3. 使新建的swap文件生效
[root@xxxx dev]# mkswap /swapfile
[root@xxxx dev]# swapon /swapfile

4. 再次查看确认新建的swap区是否生效
[root@xxxx dev]# swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 16G 14.2G -2
/swapfile file 16G 0B -3
[root@xxxx dev]# free -h
total used free shared buff/cache available
Mem: 62G 48G 481M 12G 13G 1.6G
Swap: 31G 14G 17G

5. 设置开机启动,在文件的做底部添加如下内容`/swapfile swap swap default 0 0`
[root@xxxx dev]# vim /etc/fstab
下面的内容是举例
/dev/mapper/xxxxx-home /home xfs defaults 0 0
/dev/mapper/xxxxx-swap swap swap defaults 0 0
/swapfile swap swap defaults 0 0

扩展

  1. 删除正在使用的swap分区

    1
    [root@xxxx dev]# swapoff /swapfile
  2. 删除swap分区文件

    1
    [root@xxxx dev]# rm -rf /swapfile
  3. 删除或注释掉/etc/fstab文件中关于开机自动挂载的内容