上图可看出,内存还是剩余很多的 但是swap却是剩的可怜。

使用swap而不使用物理内存 ,会大大降低进程的运行质量

解决:找出使用swap的进程,重启

 for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr |head -n 20

命令:分析/proc/[pid]/smaps 的swap字符段

释放内存缓存:

一、什么是linux的内存机制?

直接从物理内存读写数据要比从硬盘读写数据要快的多,所以,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。

物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念(swap),虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。此磁盘的类型会影响swap分区的读写速率,当然固态硬盘是最好的。

作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。

Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

要深入了解linux内存运行机制,需要知道下面提到的几个方面:

  1. Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。

  2. Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需 要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担心什么,只要知道是怎么一回事就可以了。

  3. 交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页 面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽 然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。

因此,合理规划和设计Linux内存的使用,是非常重要的.

在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写 数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得非常低下,因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种情况下,Linux引入了buffers和 cached机制。

buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers 与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操 作系统的性能。但buffers与cached缓冲的内容却是不同的。

buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。

二、linux什么时候开始使用虚拟内存(swap)?

cat /proc/sys/vm/swappiness

30

上面这个30代表物理内存在使用30%的时候才会使用swap

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,

swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

通常情况下:

swap分区设置建议是内存的两倍 (内存小于等于4G时),如果内存大于4G,swap只要比内存大就行。另外尽量的将swappiness调低,这样系统的性能会更好。但是如果你swap分区本身分的少,vm.swappiness值就不要设置过小

B.修改swappiness参数

临时性修改:

[root@O 09:50:02~]# sysctl vm.swappiness=70
vm.swappiness = 70

永久性修改:

vim /etc/sysctl.conf加入参数:vm.swappiness = 70重读配置文件:[root@O 09:50:04~]# sysctl -p检查是否生效:[root@O 09:50:07~]# cat /proc/sys/vm/swappiness                 70

三、怎么释放内存?

一般系统是不会自动释放内存的

关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存

实操:

使用Linux命令清除缓存中的数据:echo 3 > /proc/sys/vm/drop_caches

四、怎么释放swap?

前提:首先要保证内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap。

a.查看当前swap分区挂载在哪?

swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1               partition   8257532 5211164 -1

b.关停这个分区

swapoff /dev/dm-1

c.查看状态:

swapon -s
Filename                Type        Size    Used    Priority

d.查看swap分区是否关停,最下面一行显示全0

[root@O 10:04:17~]# free -htotal        used        free      shared  buff/cache   available
Mem:            15G        4.2G        7.2G        156M        4.1G         10G
Swap:          0            0           0

e.将swap挂载到/dev/sda5上

swapon /dev/dm-1

f.查看挂载是否成功

[root@O 10:09:40~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition   8257532 5206300 -1

五、一些实际的小例子?

我在设置mysql的时候,将

my.cnf文件

innodb_buffer_pool_size = 6G(我操作系统的内存就是6G,一般这个值设置为操作系统内存的80%)

这个值并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。

这里你可以这么理解,当我将这个buffer_pool_size设置得过大,跟操作系统内存一样大的时候,我使用mysql,会在一段时间内调用大量的数据进内存,由于linux的内存机制,再根据最近最优的原则,将一部分数据筛选放入swap分区,而swap分区没有及时的清理掉数据,当再次调用其它数据的时候,又会将一部分数据筛选放入swap分区,可能会出现一个现象,就是物理内存还有剩余,甚至是空的,而swap分区却是满的。

swap分区使用率过高相关推荐

  1. Linux SWAP分区占用率高,刷新SWAP分区方法

    公司一台服务器做网关,ssh和执行一些命令时都特别卡,看了下系统负载并不高. [root@spider120 ~]# top -c iowait 也不高,网卡流量也正常. 最后查看 iostat -x ...

  2. linux java占用199%,linux分区使用率过高又查询不到被哪些文件占用的问题

    今天客户反映RAC的一个节点/tmp目录空间使用率较高,昨天已经100%,我连上服务器检查的时候,使用率也超过80%. [root@p3rac1 ~]# df -h Filesystem Size U ...

  3. 服务器swap占用过高,主机swap区使用率过高

    故障现象客户一台rx8640的主机,巡检的时候发现syslog.log中有一条信息: Jul 30 09:37:52 imisdb2 vmunix: Deferred swap reservation ...

  4. linux物理内存没用完swap占用大,Linux占用swap分区过高,物理内存还有剩余

    Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...

  5. MySQL针对Swap分区的运维注意点

    Linux有很多很好的内存.IO调度机制,但是并不会适用于所有场景.对于运维人员来说,Linux比较让人头疼的一个地方是:它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上. ...

  6. linux的SWAP分区

    linux的SWAP分区 from net 汇总网络信息,并进行测试验证,感谢网络. Linux SWAP 深度解读 https://blog.csdn.net/wh8_2011/article/de ...

  7. linux内存管理笔记(四十一)----swap分区

    前面我们学习了操作系统通过"虚拟内存"技术,不但在功能上突破了物理内存的限制,使程序可以操作大于实际物理内存的空间:更重要的是,隔离了每个进程的安全保护,使每个进程都不受其他程序的 ...

  8. debian 9/ ubuntu 添加swap分区

    Linux 中 Swap(交换分区),类似于 Windows 的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况. 先查看是否已经存在swap分区了: sud ...

  9. 【树莓派】为树莓派配置或扩展swap分区

    由于树莓派3的默认内存只有1G,而应用程序运行过程中,存在大量的IO读写,以及网络转换,内存交换等.这样,也有很多buffer.cache资源占用等,很快就会接近1GB,最终导致可使用内存就几KB,程 ...

最新文章

  1. appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
  2. 随笔-20150513
  3. 推荐系统实践整体化总结
  4. java升级为jdk1.8_jdk1.7升级为1.8
  5. c#学习路线应该靠谱
  6. Linux基础优化方法(四)———远程连接缓慢优化
  7. 前端学习(2021)vue之电商管理系统电商系统之合并goodlist的分支
  8. 剑指Offer - 面试题64. 求1+2+…+n(递归)
  9. [LCP28] 采购方案
  10. wps怎么投递简历发到boss直聘_BOSS直聘角逐招聘季:装机量、下载增量、增长率三料冠军...
  11. 分布式系统关注点(6)——「负载均衡」到底该如何实施?
  12. 2008域控服务器创建本地用户,windows 2008 r2 用域帐户登陆后怎么修改本地用户密码?...
  13. 在一起计时器_奇妙物理·高中篇:打点计时器基本介绍
  14. iapp如何导入本地源码,iapp导入源码使用教程
  15. win10不能安装破解软件:提示系统资源不足,无法完成请求服务的解决方法
  16. Table is marked as crashed and should be repaire (
  17. 读书笔记-大教堂与集市
  18. 智能发展的四个层次:运算智能,感知智能,认知智能,强智能。道翰天琼认知智能。
  19. c语言高校信息查询系统,高校人员信息管理系统c语言.doc
  20. 计算机重复重启,计算机反复重启

热门文章

  1. iOS经典UI素材网址
  2. windows下svn备份
  3. javascript求1到100以内素数
  4. java发送邮件设置端口_如何更改JavaMail端口
  5. spring security如果未登录,返回JSON数据
  6. LINUX内核狂想曲之SLOB分配器
  7. 学习前端必须掌握的六个知识点
  8. BST树遍历O(n)时间复杂度+O(1)空间复杂度
  9. TensorFlow入门教程:14:噪声数据: 随机分布
  10. 蓝桥杯—砝码称重—Java