zoukankan      html  css  js  c++  java
  • mysql 记录一次内存清理

    摘自:https://blog.csdn.net/wyzxg/article/details/7279986/

    摘要:Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:"-/+ buffers/cache: 58 191" 这才是系统可用的内存大小。

    记录一次维护记录

    在放假回来后,发现服务器内存没有剩余空间了,并且使用了swap分区。

    维护目标:释放内存,关闭SWAP分区的使用。

    分析原因:

    疑点1

    https://blog.csdn.net/dc666/article/details/78901341

    按上文的思路,发现有疑点,有长期运行的SQL

     mysql> show full processlist;

    *************************** 3. row ***************************

     Id: 143

     User: slave

     Host: 192.168.101.103:3306

     db: NULL

     Command: Binlog Dump

     Time: 3557004

     State: Master has sent all binlog to slave; waiting for more updates

     Info: NULL

    *************************** 4. row ***************************

    疑点2

     mysql> show engine innodb statusG;

     BUFFER POOL AND MEMORY

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

     Total large memory allocated 120937512960

     Dictionary memory allocated 34511769

     Buffer pool size   7208520

     Free buffers       8196

     Database pages     7199134

     Old database pages 2657328

     Modified db pages  1531

    引擎的已经没有可用空间,应该是innodb_buffer_pool满了;怀疑是被执行计划占用满了。

    处理:通过杀掉进程,flush tables等操作,问题依旧没有解决,所以也没搞清楚问题出在哪。但不清楚出问题的具体原因,也一样能解决问题。

    mysql的体系结构,与oracle的不同,很重要的一点,对mysql对内存的管理上,是通过系统OS层实现的,通过清理释放系统内存,一样能达到目的。

    清理之前的内存使用情况:

     

    [root@~]# sync
    [root@~]# cat /proc/sys/vm/drop_caches
    0
    [root@~]# echo 3 > /proc/sys/vm/drop_caches

     清理之后的状态:

     

    通过 echo 3 > /proc/sys/vm/drop_caches,释放了大约28G内存。

    当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。

    linux 文件系统的 cache 分为2种:page cache buffer cache, page cache 是用于文件,inode 等操作的 cache,而 buffer cache 是用于块设备的操作。

    将/proc/sys/vm/drop_caches设置为1、2、3的作用:

    To free pagecache:
    # echo 1 > /proc/sys/vm/drop_caches

    To free dentries and inodes:
    # echo 2 > /proc/sys/vm/drop_caches

    To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches

    关闭SWAP分区

    通过free -m,可以查得SWAP使用情况,当前已经使用了约10G,

    释放SWAP分区

    通过实际记录,释放约10G的交换文件,用时达4小时,而释放约20G内存,耗时不过10秒左右,这由硬件I/O性能决定。

    验证结果

    没有内容返回,说明当前SWAP分区已经禁用。

    对于SWAP分区的使用,当服务器的内存容量,并不能完全满足使用要求时,有限的开启SWAP使用,是有益的,vm.swappiness参数的作用,

    是设定使用SWAP的优先级,数字越大,优先级越高,可以适当降低SWAP的优先级,来避免SWAP被过多使用。

    [root@~]# sysctl -q vm.swappiness  #查询当前SWAP优先级
    vm.swappiness = 60
    [root@~]# sudo sysctl vm.swappiness=10 #修改
    vm.swappiness = 10
    [root@ ~]# sysctl -q vm.swappiness  #验证
    vm.swappiness = 10

    欢迎大佬指正。。

  • 相关阅读:
    Java对象转型
    .Net之路(十二)Cookie对象
    java学习笔记-包
    MongoDB的安装和简单使用
    考试系统维护中对项目管理的一点体会
    .Net之路(十一)StringBuilder和string
    考试系统调试优化总结
    我的2013——走过就有收获
    针对:Arraylist集合无法修改,下一次枚举无法操作的解决方案
    函数第二部分:为什么说动态参数是没有计划好的参数-Python基础前传(11)
  • 原文地址:https://www.cnblogs.com/shc336/p/9796638.html
Copyright © 2011-2022 走看看