---
title: SWAP分区过小导致系统异常的解决方法
description: "在某数据库测试的时候发现执行Linux基础命令时提示“-bash: fork: Cannot allocate memory”。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/troubleshooting/trouble/boostkit_database_troublecase_020.html
sourcePath: /source/zh/kunpengdbs/troubleshooting/trouble/boostkit_database_troublecase_020.html
indexId: 23f920aadd610b9b346defbc8a119e6aefca17ec39d0e7b7e62237b840f3009384
---
# SWAP分区过小导致系统异常的解决方法

#### 问题现象描述

在某数据库测试的时候发现执行Linux基础命令时提示“-bash: fork: Cannot allocate memory”。

重启数据库后，重新执行对应的Linux基础命令，问题不再出现。然而，在后续测试过程中经常出现数据库进程减少的情况。


#### 关键过程、根本原因分析

1. 由于本例中系统的进程最大数已经设置成32768，已经非常大，因此数据库进程数满的可能性不大。
2. 本例中出现问题后，无法执行对应命令查看系统状态。因此需要查看message日志来定位问题。

  a. 登录BMC，收集message日志并查看，发现有crash的现象。日志上还可以看出，系统内存不够，所以kill了数据库进程，所以数据库进程会减少。
  b. 此外，从日志上还发现了另外一个关键信息：SWAP空间已经被用光，触发了OOM（Out Of Memory），导致系统出现了异常。跟以往的测试相比，本次测试数据库使用的内存大小都是一样的，但是这次开辟的SWAP空间较小。以往的测试中，SWAP分区有150GB，而这次才开了4GB，在内存紧张的情况下，很容易触发OOM。


#### 结论、解决方案及效果

由于客户不愿意修改数据库内存，认为当前的数据库内存配置是最优的，所以动态调整了SWAP分区大小来解决该问题。

1. 创建空文件。
  1 dd if=/dev/zero of=/home/swap bs=1G count=200

2. 挂载到SWAP空间。
  1 mkswap /home/swap

3. 加载SWAP空间。
  1 /sbin/swapon /home/swap

4. 1~3的配置会在重启服务器后失效，如果想让配置永久生效，则需要修改配置文件“/etc/fstab”，设置开机自动挂载。在“/etc/fstab”中新增以下内容或修改为如下内容：

```
/home/swap                       swap                    swap    defaults        0 0
```
