情况描述:

朋友在阿里云上有一台系统为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,问题解决了。

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

centos7 未启用swap导致内存使用率过高。的更多相关文章

  1. 空循环导致CPU使用率很高

    业务背景 业务背景就是需要将多张业务表中的数据增量同步到一张大宽表中,后台系统基于这张大宽表开展业务,所以就开发了一个数据同步工具,由中间件采集binlog消息到kafka里,然后我去消费,实现增量同 ...

  2. Windows Server 2008 R2服务器内存使用率过高,但与任务管理器中进程占用内存和不一致

    系统环境: Windows Server 2008 R2 + Sql Server 2008 R2   问题描述: Windows Server 2008 R2系统内存占用率过大,而在任务管理器中各进 ...

  3. Windows Server 2008 R2 服务器内存使用率过高几乎耗光

    系统环境: Windows Server 2008 R2 Enterprise 搭建有 web服务器(iis) 和  文件服务   问题描述: Windows Server 2008 R2系统内存耗光 ...

  4. 性能分析(5)- 软中断导致 CPU 使用率过高的案例

    性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前言 软中断基本原理,可参考这篇博客:https: ...

  5. 解决mysqldb查询大量数据导致内存使用过高的问题

    1.源码 connection=MySQLdb.connect( host="thehost",user="theuser", passwd="the ...

  6. 【译】Asp.net core应用在 Kubernetes上内存使用率过高问题分析

    原文:https://blog.markvincze.com/troubleshooting-high-memory-usage-with-asp-net-core-on-kubernetes/ ps ...

  7. Oracle查询语句导致CPU使用率过高问题处理

    解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...

  8. 代码死循环导致cpu使用率过高

    1. top命令查看进程pid  27081 2. ps -mp pid -o THREAD,tid,time  (tid:31128) 3.printf “%x\n” number  #将tid转换 ...

  9. Linux下php-fpm进程过多导致内存耗尽问题

    这篇文章主要介绍了解决Linux下php-fpm进程过多导致内存耗尽问题,需要的朋友可以参考下   最近,发现个人博客的Linux服务器,数据库服务经常挂掉,导致需要重启,才能正常访问,极其恶心,于是 ...

随机推荐

  1. MySQL学习02(操作数据库)

    操作数据库 结构化查询语句分类 名称 解释 命令 DDL(数据库定义语言) 定义和管理数据对象,例如数据库和数据表 create.drop.alter DML(数据操作语言) 用于操作数据库对象中所包 ...

  2. 解决tomcat7中request会对中文重新编码,导致后台接收到为encode编码后参数问题

    package xxx; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.ut ...

  3. 提取网页的markdown表格利器

    在线Markdown表格转换器 markdown表格转换器,蛮好用的.偶然发现的开源工具,推荐一波. 这是目标链接:https://docs.locust.io/en/stable/configura ...

  4. minor gc和Major GC,Full GC的触发条件

    Minor GC Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC.因为新生代中大多数 ...

  5. mongodb中时间跟实际时间相差8小时----时区问题

    遇到的问题 参考:mongo中时间跟实际时间相差8小时 Mongo中一个Collection有一个字段用来存放数据的插入时间,但记录的时间比实际时间晚了8小时. 查询得知存储在mongodb中的时间是 ...

  6. mfc HackerTools拖动文件

    VOID DragAcceptFiles(          HWND hWnd,    BOOL fAccept); 这个函数的调用,表示你要让某个窗体能够接受文件的拖入.第一个参数指定是哪个窗口, ...

  7. Java知识图谱(附:阿里Java学习计划)

    摘要:     本文主要描绘了Java基础学习过程,给出Java知识结构图,以及阿里Java岗学习计划,对Java学习爱好者.准备及将要从事Java开发方面的同学大有裨益. 温馨提示:     由于C ...

  8. 关于Junit中Assert已经过时

    在junit4.12之后,Assert就过时了,提供了TestCase来取代: 同样在TestCase中原本比较常见的一些方法也已经取消了,例如:assertNotEquals.assertThat. ...

  9. 前端性能优化之http缓存

    前不久,公司前端开会,领导抽问了4个问题,前3个简单大家都答起来了,第4个问题关于缓存的这方面我只是了解,结果刚好问到我了(会的不问,专门挑我不熟悉的问,我这运气真是没话说),20多个前端看着我,答得 ...

  10. ES6两种静态属性的书写方法

    1.这种可以不用实例化对象就能输出. class Car{ constructor(){ } } Car.tool=4 console.log(Car.tool);//4 2.必须实例化后才能输出.但 ...