ubuntu 物理内存使用达100%,怎样排查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu 物理内存使用达100%,怎样排查相关的知识,希望对你有一定的参考价值。

参考技术A 有时候,查看资源管理器你会发现一个奇怪的现象。物理内存使用率没超过50%,就开始使用swap空间了。用swap显然没有使用物理内存快。如何修改?
在ubuntu 里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于 ubuntu的默认设置,这个值等于60,建议修改为10。具体这样做:
1、查看你的系统里面的swappiness,在终端输入 cat /proc/sys/vm/swappiness,不出意外结果应该是60
2、修改swappiness值为10。在终端输入 sudo gedit /etc/sysctl.conf ,然后在最后一行添加 vm.swappiness=10 ,保存。
3、重启电脑,使设置生效。
这样Ubuntu就能最大限度使用物理内存了!!

生产中一次内存使用过高排查过程

本文参考

? https://blog.csdn.net/top_gun_1/article/details/50777329

  • 我这里知道这个消息是通过bearychart报警消息获得的,报警的信息是,当前服务器内存使用值已经达到了百分之九十二

  • 由于该机器我无法从外网连接,所以周六来公司看了下情况,通过htop命令看到是MongoDB在大量吃内存,物理内存吃掉14个G,虚拟内存吃掉16个G

一点解释:
目前,MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟缓存管理器去处理,这样的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,事实上MongoDB会占用所有能用的内存,所以最好不要把别的服务和MongoDB放一起。

Linux内核有oom kill 机制,大概意思就是内存使用过高,会随机干掉一些服务(这里我也不清楚它是如何选择干掉的服务的,应该是根据进程号.docker可以设置不受oom kill机制的限制,但很危险)
  • MongoDB释放内存的几种方法
  1. 重启服务器释放内存(最笨,最行之有效,最危险)
  2. 参考文首文档里的有两条命令,但没有测试过,测试了"closealldatabases"那个,没有明显降低内存
  • 最后解决

由于数据库都是在docker里的,我打算跟领导说下,使用docker资源限制机制,暂时的话先不要停掉容器来达到缓解内存的目的

  • 总结
  1. 独挡一面能力不够强,原因很多,找一个理由说服下自己,数据库或者其它一切东西不是我参与搭建或者独立搭建的,心里没有数,难免放不开手脚
  2. 时间的问题

以上是关于ubuntu 物理内存使用达100%,怎样排查的主要内容,如果未能解决你的问题,请参考以下文章

Android内存的相关排查方法

SylixOS内存错误排查方法

如何更改 mapreduce/hive 作业中的物理内存?

Ubuntu Server 中实际内存与物理内存不相等的问题

对Linux 虚拟内存和物理内存的理解以及Linux下怎样增加虚拟内存

Linux内存管理-高端内存