zoukankan      html  css  js  c++  java
  • centos7 未启用swap导致内存使用率过高。

    情况描述:

    朋友在阿里云上有一台系统为CentOS7的VPS,内存为2GB,用于平时开发自己的项目时测试使用;
    他在上面运行了5个docker实例,运行java程序;还有一个mysql服务;

    上述5个docker实例和mysql服务总共占用VPS1.35GB的内存,系统运行很慢。ssh连接输入命令都有卡顿;

    因为内存太小,没什么可以优化的空间。所以准备启用swap交换空间。

    百度了一下收到博客文章, 通过文章中提供的方式添加swap空间;但是遇到一个问题,该centos7系统中,不存在/dev/zero文件,所以找到另一篇博客文章.

    具体步骤如下:

    1. 误删/dev/zero文件的解决方法如下两条命令进行修复重建文件:

    [root@localhost sslinux]# mknod /dev/zero c 1 5
    [root@localhost sslinux]# chmod 666 /dev/zero

    修复完成后用命令测试下是否可用,发现已经可以正常使用磁盘测试了

    [root@localhost sq808sq]# dd if=/dev/zero of=test bs=64k count=4k oflag=dsync

    至此,/dev/zero 文件的修复重建工作已经完成(该文件为系统特殊文件丢失后不能从系统盘或其他系统直接复制使用,只能通过重建修复,/dev/null文件也是如此)

    2.使用dd 命令 新增 swap空间(/var/swap)

    dd if=/dev/zero of=/var/swap bs=1024 count=4096000
    ls -lh /var/swap 
    mkswap /var/swap 
    mkswap -f /var/swap
    swapon /var/swap 
    free -lh
    swapon /var/swap 
    more /proc/swaps 
    vim /etc/fstab 
    free -lh

    将swap设置为开机自动挂载:

    [root@izbp12z8w3jbbgmy9yiz92z ~]# tail -1 /etc/fstab 
    /var/swap               swap            swap    defaults    0 0

    但是此时使用 free -lh 命令查看memory和swap的使用情况,依旧没什么变化。

    1.swap 是存储“暂时不需要使用的内存”到硬盘上,等到使用的时候再载入到内存中
    这种情况只能说明,没有“长期不使用的内存”

    2.Swap 的使用量和 OOM 没有直接关系。OOM 看的是申请量不是使用量。哪怕你内存没用完都会触发 OOM

    memory和swap的关系

    系统在什么情况下才会使用SWAP?

    实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。

    [root@rhce ~]# cat /proc/sys/vm/swappiness
    60

    该值默认值是60.
    swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
    swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

    即内存足够大的时候,swappiness设置尽量小; 内存较小的时候,swappiness要设置的尽量大;

    如何修改swappiness参数?

    • 临时性修改:
      [root@rhce ~]# sysctl vm.swappiness=10
      vm.swappiness = 10
      
      [root@rhce ~]# cat /proc/sys/vm/swappiness
      10
    • 永久修改:
      在/etc/sysctl.conf 文件里添加如下参数:
      vm.swappiness=10
      
      [root@izbp12z8w3jbbgmy9yiz92z ~]# sed -i '$a vm.swappiness=100' /etc/sysctl.conf 
      [root@izbp12z8w3jbbgmy9yiz92z ~]# sysctl vm.swappiness
      vm.swappiness = 100

    到这里,系统就会尽可能的使用swap。 可以执行一个占用大量内存的命令看一下效果;

    此时再查看内存和swap的使用情况:

    [root@izbp12z8w3jbbgmy9yiz92z ~]# free -lh
                  total        used        free      shared  buff/cache   available
    Mem:           1.8G        899M        690M        1.5M        249M        779M
    Low:           1.8G        1.1G        690M
    High:            0B          0B          0B
    Swap:          3.9G        715M        3.2G

    OK,问题解决了。

    因为觉得以后可能会再次遇到这样的情况,所以简单记录一下;

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

  • 相关阅读:
    Mysql基础3-数据操作语言DML-数据查询语言DQL
    Mysql基础2-数据定义语言DDL
    Mysql基础1-基础语法-字段类型
    php源码建博客5--建库建表-配置文件-错误日志
    PHP基础4--函数-数组
    php源码建博客4--实现MVC结构微型框架
    PHP基础3--文件加载-错误处理
    php源码建博客3--区分平台的MVC结构
    php源码建博客2--实现单入口MVC结构
    php源码建博客1--搭建站点-实现登录页面
  • 原文地址:https://www.cnblogs.com/wyt007/p/15320121.html
Copyright © 2011-2022 走看看