解决linux内存不足问题

  • 1 开启交换分区 swap
  • 2 安装nexus的时候遇到的内存不足
  • 3 安装gitlab的时候遇到的内存不足

1 开启交换分区 swap

1、查看是否启用swap分区
# free -m
# cat /proc/swaps

2、如果未启用swap分区功能,则新建一个专门的文件用于swap分区
# dd if=/dev/zero of=/mnt/swap bs=block_size count=number_of_block
注:block_size、number_of_block 大小可以自定义,比如 bs=1M count=1024
 代表设置 1G 大小 SWAP 分区

3、设置交换分区文件
通过mkswap命令将上面新建出的文件做成swap分区
# mkswap /mnt/swap
注:mkswap时如果出现如下错误,是因为SWAP 文件太小,SWAP 文件至少应该大于 40KB,
重新执行上一步骤生成更大的文件即可
mkswap: error: swap area needs to be at least 40 KiB

4、修改内核参数 /proc/sys/vm/swappiness 
当 swappiness为 0 时,表示最大限度的使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区;
当 swappiness 为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
根据实际需要设置该值即可,如下述方法临时修改此参数,假设我们配置为空闲内存少于 30% 时才使用 SWAP 分区
# echo 30 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效,可修改 /etc/sysctl.conf 文件,增加以下内容
# vim /etc/sysctl.conf
vm.swappiness=30
# sysctl -p

sysctl :
p   载入sysctl配置文件
           如-p后未指定路径,则载入 /etc/sysctl.conf

5、启用此交换分区的交换功能
#swapon /mnt/swap
注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

6、设置开机时自启用 SWAP 分区
修改文件 /etc/fstab 中的 SWAP 行,添加一行/mnt/swap swap swap defaults 0 0
# echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab

7、检查是否设置成功
# cat /proc/swaps
# free -m

8、关闭swap分区
当系统出现内存不足时,开启 SWAP 可能会因频繁换页操作,导致 IO 性能下降。如果要关闭 SWAP,可以采用如下方法。
使用命令 swapoff 关闭 SWAP
修改 /etc/fstab 文件,删除或注释相关配置,取消 SWAP 的自动挂载#swapoff /mnt/swap
#swapoff -a >/dev/null

2 安装nexus的时候遇到的内存不足

当我使用我的剩余的一台空闲的阿里云服务器安装nexus的时候我发现这台服务器的配置是
1核1G。即使我开启了swap交换分区查看日志仍然提示内存溢出,不足。
docker logs -f -t --tail=100 e5006b2ca3dc
这个时候需要手动修改nexus的配置文件。

我使用的是docker进行安装的nexus3。
进入docker容器中修改/opt/sonatype/nexus/bin目录下的
nexus.vmoptions这个文件

如下的参数配置成下面的样子。
-Xms128M
-Xmx128M
-XX:MaxDirectMemorySize=600M

然后我生成了一个新的镜像上传到我的dockerhub上面以防之后遇到这种问题仍需要使用。

docker commit -m 'optimizeVM' 3fe493cd79b4  heyoui/nexus3

docker login 登录之后
docker push heyoui/nexus3将其推到我的dockerHub上了。
反正1.开启交换分区 2修改启动配置虚拟机参数。成功使用1核1G的服务器跑起来了nexus。

3 安装gitlab的时候遇到的内存不足

当我使用我的剩余的一台空闲的阿里云服务器安装gitlab的时候我发现服务一直启动不了,一直报502
错误,查看日志发现是内存不足。
docker logs -f -t --tail=100 e5006b2ca3dc
我的阿里云服务器的配置是1核2G的服务器。查了很多网上的解决方式都是基本上要求最少配置为
2核4g的服务器。因为gitlab实在是太吃内存了。服务器有限升级太贵。所以,
version: ‘3’

services:
    web:
      image: 'twang2218/gitlab-ce-zh'
      restart: always
      container_name: gitlab
      hostname: '192.168.10.130'
      privileged: true
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://192.168.10.130'
          gitlab_rails['gitlab_shell_ssh_port'] = 2222
          unicorn['port'] = 8888
          nginx['listen_port'] = 80
      ports:
        - '80:80'
        - '8443:443'
        - '2222:22'
      volumes:
        - /usr/local/docker/gitlab/config:/etc/gitlab
        - /usr/local/docker/gitlab/data:/var/opt/gitlab
        - /usr/local/docker/gitlab/logs:/var/log/gitlab

我是通过docker-compose.yml运行的gitlab容器。并将数据卷挂载在其上。
1.开启了swap交换分区。2 修改了我挂载的数据卷的其中的一个配置,
config下的gitlab.rb 设置了核心线程数为1.本来默认是核数+1.但是我只有1核。后来又
设置成了2核。

docker exec -it gitlab gitlab-ctl reconfigure

docker exec -it gitlab gitlab-ctl restart

将容器重启。这两个命令我也忘了有没有使用到了。

然后发现启动是可以启动了,但是我的gitlab仍然是卡到爆炸。

后来发现,gitlab在使用的时候是默认使用了一个头像插件将其开启了。

但是这个头像服务是需要的,所以会导致加载很慢,于是我将其进行了关闭,之后发现,

瞬间好了很多。gitlab不会再出现502了。

gitlab内存占用过大 gitlab内存要求_内存不足


真的是:开启了分区,设置了线程数、设置了缓冲大小 最后都不如一个禁止使用的随机图片来得方便。