常规操作

  1. 使用top 查看内存的占用情况,然后键入"M"命令根据内存的占用情况降序排列("P"是CPU占用情况降序排列)
  2. 关闭掉不需要的进程,
  3. 再使用top查看内存占用情况,发觉内存占用率已经降下来了,但是free -g却还有100G被占用(内存总共128G),vmstat发现是cache 占用了大量内存。
  4. 使用 echo 3 > /proc/sys/vm/drop_caches 释放缓存
  5. 再使用free -g 查看内存使用情况,发现内存使用情况已经正常了。

常用的释放缓存的命令如下

To free pagecache:仅清除页面缓存(PageCache)
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:清除目录项和inodeecho 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:清除页面缓存,目录项和inodeecho 3 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

查看linux文件大小

du --max-depth 1 -lh  /var(要查看文件全路径)

linux查看磁盘空间

df -hl 查看磁盘剩余空间
df -h 查看每个根路径的分区大小
du -sh [目录名] 返回该目录的大小
du -sm [文件夹] 返回该文件夹总M数
du -h [目录名] 查看指定文件夹下的所有文件大小(包含子文件夹)

Linux 查看内存使用率命令

free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'

自动清理内存shell脚本

#!/bin/bash
#系统分配的区总量
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`
#当前剩余的大小
mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`
#当前已使用的used大小
mem_used=`free -m | grep Mem | awk '{print $3}'`
if (($mem_used != 0)); then
#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >> /var/log/mem_detect.log
#设置的告警值为20%(即使用超过80%的时候告警)。
mem_warn=0.20
#当前剩余百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
mem_now=`expr $mem_per \> $mem_warn`
#如果当前使用超过80%(即剩余小于20%,上面的返回值等于0),释放内存
if (($mem_now == 0)); then
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
#将release memory OK !写入temp文件夹的memstat_日期.log日志中
echo "--->release memory OK ! " >>temp/memstat_$(date +%Y%m%d_%H%M%S).log
fi
fi 

Linux释放内存的相关知识

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,例如当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。,此时就需 要执行释放内存(清理缓存)的操作了。

Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉吗?所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是 释放缓存的操作了。

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改 /proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。要达到释 放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就 是不释放缓存。

一般复制了文件后,可用内存会变少,都被cached占用了,这是linux为了提高文件读取效率的做法:为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

释放内存前先使用sync命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

第一行用全局角度描述系统使用的内存状况:

  • total 内存总数
  • used 已经使用的内存数,一般情况这个值会比较大,因为这个值包括了cache 应用程序使用的内存
  • free 空闲的内存数
  • shared 多个进程共享的内存总额
  • buffers 缓存,作为buffer cache的内存,是块设备的读写缓冲区,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
  • cached 缓存,作为page cache的内存, 文件系统的cache,用于已打开的文件

第二行表示swap的使用:

  • used 已使用:交换区内存,相当于已使用的虚拟内存
  • free 未使用

swap全称为swap place,即交换区,当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。

实际项目中的经验告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。我觉得既然核心是可以快速清空buffer或cache,但核心并没有这样做(默认值是0),我们不应该随便去改变它。

一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM错 误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了,所以说一般情况下linux都不用经常手动释放内存

补充:

Linux 内存管理做了很多精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache,目的就是为了提升磁盘IO的性能。从低速的块设备上读取数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,它可以从内存中直接读取,从而绕开低速的块设备,从而提高系统的整体性能。而Linux会充分利用这些空闲的内存,设计思想是内存空闲还不如拿来多缓存一些数据,等下次程序再次访问这些数据速度就快了,而如果程序要使用内存而系统中内存又不足时,这时不是使用交换分区,而是快速回收部分缓存,将它们留给用户程序使用。

因此,可以看出,buffers/cached真是百益而无一害,真正的坏处可能让用户产生一种错觉——Linux耗内存!其实不然,Linux并没有吃掉你的内存,只要还未使用到交换分区,你的内存所剩无几时,你应该感到庆幸,因为Linux 缓存了大量的数据,也许下一次你就从中受益!

Linux服务器之内存过高解决思路相关推荐

  1. shell 调用securecrt_securecrt导入xshell 解决xshell、SecureCRT中文乱码 - Linux - 服务器之家...

    securecrt导入xshell 解决xshell.SecureCRT中文乱码 发布时间:2017-04-14 来源:服务器之家 一.解决xshell 中文乱码 在xshell命令行里面 输入: l ...

  2. Win11内存占用高怎么办,Win11内存占用高解决方法

    ​Win11内存占用高怎么办?Win11系统是目前非常火热的电脑操作系统,很多用户安装使用Win11系统后发现系统内存占用率非常高,不知道win11内存占用高怎么解决,我们可以尝试通过关闭一些不需要的 ...

  3. 计算机内存占用过高,电脑内存占用高怎么办 Win7内存占用高解决办法

    Win7系统在正常使用的时候会占用很多资源,比如网络诊断,缓存还有其他各种平时大部分时候我们都用不上的资源,如果我们电脑本身内存比较小只有2G内存或者以下,打开程序稍微多加个就会造成Win7内存占用高 ...

  4. windows 内存过高解决办法

    windows 内存过高解决办法 办法一 由于win10默认开启了内存压缩(memory compression), 目的是压缩内存让内存占用更低 ,但是实际并不是无时无刻都需要使用这个功能.因此我们 ...

  5. 空服务器安装linux,debian服务器linux服务器web建站搭建linux服务器之Debian安装

    debian服务器linux服务器web建站搭建linux服务器之Debian安装 原文来自i火吧 大家都知道linux的发行版本很多,有centos啊,debian啊,ubuntu等,下面我就用de ...

  6. linux服务器之查看内存使用情况

    读取/proc/meminfo 文件 MemTotal: 45964 kB //所有可用的内存大小,物理内存减去预留位和内核使用.系统从加电开始到引导完成,firmware/BIOS要预留一些内存,内 ...

  7. 【开发经验】java服务生产环境CPU使用过高解决思路

    文章目录 思路 1.定位java服务进程 2.定位线程id 3.定位代码块 java服务生产环境CPU突然升高,日志查询无果时,可以通过使用jvm的调试工具定位问题. 思路 定位java服务进程--& ...

  8. 安装linux系统报softlock,soft lockup 解决思路

    一. 前言 前几天,帮同事一起查一个机器老是挂死无法进入问题,说有一台虚拟机时不时登陆不上挂死,同时甲方竟然没有这些主机监控,判断不了当时的cpu,内存,网络等的基础数据信息,那就只能看看内核信息了. ...

  9. linux搭建python运行环境_centos运行.py centos5.5下搭建python开发运行环境 - Linux - 服务器之家...

    centos运行.py centos5.5下搭建python开发运行环境 发布时间:2017-04-28 来源:服务器之家 我们知道ython可以在windows.linux.android运行了,但 ...

最新文章

  1. JWT(JSON Web Token)简介及实现
  2. android中Textview 和图片同时显示时,文字省略号显示,图片自动靠到右边
  3. Web服务器记录中查找***踪迹
  4. OpenCV霍夫圈检测Hough Circle Detection的实例(附完整代码)
  5. OpenCV使用G-API实现面部美化算法
  6. java开发过程中的命名规范
  7. 从Tom说JSP原理
  8. java 切换主线程_Java线程状态及切换、关闭线程的正确姿势分享
  9. 【解题报告】VijosP1448校门外的树(困难版)
  10. shell脚本的学习(二)
  11. QT+OPENCV+FFTW内存问题
  12. 使用 Python 多处理库处理 3D 数据
  13. Python爬取链家成都二手房源信息 asyncio + aiohttp 异步爬虫实战
  14. 股市财富神话背后:黑庄黑嘴制造多少黑洞
  15. Spring MVC拦截器(一)---定义,配置及单个拦截器执行流程
  16. 激光雷达Velodyne16配置及录制rosbag
  17. jxl操作合并单元格复杂表头
  18. Activiti工作流知识点:
  19. 怎么用计算机向手机上传照片,老司机教你怎么把手机的照片传到电脑
  20. PowerQuery(导入数据,行操作,列操作,提取与转换,删除重复项,删除错误)

热门文章

  1. druid以及监控台使用及配置
  2. 计算机维修实操,wt初级计算机维修工操作题(二).doc
  3. 学习记录646@python求解有效年利率
  4. 安全算力护航数字中国|知道创宇亮相CNCERT中国网络安全年会
  5. 常见测试工具总结:LR、Selenium
  6. NameNode和DataNode中重要的数据结构解析
  7. 一建课件下载2019年一级建造师报考流程图,报考步骤一目了然
  8. 青少年CTF--misc部分题解
  9. 招商信诺完成15例新冠病毒感染肺炎赔付;东呈减免湖北加盟酒店重大费用 | 美通企业日报...
  10. CSS在线字体库,外部字体的引用方法@font-face