频繁读写文件导致内存使用率过高

2023-11-01

最近接到一个客户反馈,说是服务器内存使用过高,总内存16G,使用top命令查看可用内存已经不足1G了。

客户环境服务器为linux,部署了3个tomcat,每个tomcat均有大量的日志产生。

让客户使用free -m检查一下

此处有必要解释一下free命令返回的各个参数的意思(直接转了)。

解释:

  •    total:是总的物理内存
  •    used:使用中的内存
  •    free:完全空闲的内存
  •    shared:多个进程共享的内存 
  •    buffers:写缓存,在写入磁盘之前,先把数据缓存一段时间,可以释放
  •    cache:读缓存,读取过的文件,会缓存一段时间。可以释放
  •    -buffers/cache:应用程序实际使用中的内存大小,等于used-buffers-cached(Mem列的三个数)
  •    +buffers/cache:可供使用的内存总量,等于free+buffers+cached(Mem列的三个数)
  •    Swap:不解释,都能看懂的

可用看到cache已经达到10G了。是什么导致cache如此之大呢?

网上可用查到解释:

什么是Cache Memory(缓存内存):

当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory也是有办法的。

为了确认这种情况是由于文件读写造成的,以及该情况下不影响程序正常运行(cache能正确自动释放),特进行试验。

环境准备

内存8G,我准备了一个近2G的文件。下面进行cp操作并检查cached的数值。

通过测试可以发现可用内存越来越少,cached的内存越来越大,经过几次cp之后可用内存已经只有142m了。

此时我启动了3个tomcat,然后再kill掉这3个tomcat进程。

tomcat进程启动没有报内存溢出,把3个tomcat进程kill掉之后free明显多了(原先被文件读写占用的cached内存在free不足的时候回收了被tomcat占用,在tomcat被kill之后释放出来)。

 

结论:

1、linux系统在文件读写时会写入内存缓存,导致“看上去”可用内存会减少。

2、cached掉的内存不用担心,在需要内存时会释放出来。

3、cached掉的内存在需要释放时也不是全部释放的,而是一部分一部分的释放的。

 

附手动释放cached内存的方式:

如何释放Cache Memory(缓存内存):

用下面的命令可以释放Cache Memory:

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


注意,释放前最好sync一下,防止丢失数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

频繁读写文件导致内存使用率过高 的相关文章

  • java常见面试题及答案 11-20(JVM)

    11 JVM内存分哪几个区 每个区的作用是什么 java虚拟机主要分为以下一个区 方法区 1 有时候也成为永久代 在该区内很少发生垃圾回收 但是并不代表不发生GC 在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2 方法区主要用来存
  • 从主机备份ubuntu到虚拟机的坑

    系统用的是16 04 1 备份过程 直接采用这个方法 不过我是直接用的镜像 data放在U盘 没有做成启动U盘 参考链接1 问题就来了 直接挂载镜像使用的是CD ROM 可能出现权限问题无法修改 记住要提前把必要的文件保存在虚拟机的系统下
  • VMware16安装虚拟机遇到的问题

    摘要 前面提到自己安装环境为CPU Intel Core i5 12600K VMware 版本 VMware Workstation 16 Pro 16 0 0 build 16894299 创建虚拟机的时候windwos 系列的win7
  • 网站虚拟主机是什么?(什么是虚拟主机空间)

    刚入行的新手用户肯定会接触一个叫虚拟主机的空间 特别是建站行业和个人用户使用的很多 不过很多新手用户对虚拟主机空间还是理解的不太明白 下面我们就来聊聊什么是网站虚拟主机空间 什么是虚拟主机 虚拟主机又称虚拟空间 网站空间 它是由单台物理服务
  • spark-submit 报错 Initial job has not accepted any resources

    spark submit 报这样的错误 WARN scheduler TaskSchedulerImpl Initial job has not accepted any resources check your cluster UI to
  • Failed to create the Java Virtual Machine问题解决

    问题现象 打开eclipse exe 弹出如下对话框 问题分析 这是eclipse启动初始化时报的错 一般出现这种情况跟安装了多个Java虚拟机有关 然后eclipse启动的时候 不知道要配置哪一个JDK 所以会报Failed to cre
  • 远程桌面功能:从本机访问虚拟机桌面

    通过windows的远程桌面功能 实现从本机访问虚拟机桌面 一 前言 在学习本篇文章技术的同时要做好以下准备工作 1 安装VMware虚拟机 VMware12或者VMware14 2 在虚拟机上安装Windows操作系统 Windows7或
  • Oracle VM VirtualBox做好虚拟硬盘后,如何进一步更改虚拟硬盘的大小

    以管理员身份打开 命令提示符窗口 然后利用命令cd进入Oracle VM VirtualBox安装目录 如下图 我进入了Oracle VM VirtualBox安装目录 D Program Files Oracle VirtualBox 然
  • malloc与free的底层实现

    1本节引言 内存管理内幕 Linux内存管理 Malloc 本文引用了下面这篇文章 读完下面 应该读下上面两篇文章 其中 内存管理内幕 提供了一个简单的malloc free实现版本 看看它的free设计 相信有足够的吸引力 gnu fre
  • centos8安装postgresql步骤

    1 安装源 1 sudo yum y install epel release 2 postgresql官网发布的postgresql对应的安装源 sudo yum install y https download postgresql o
  • Vmware安装后,没有VMnet0

    安装虚拟机之后 发现只有VMnet1和VMnet8 没有VMnet0 后来了解到桥接不是添加一个VMnet0虚拟网卡 而是添加网络服务 下面是VMware虚拟网卡的说明 网络类型 网络适配器名 Bridged VMnet0 NAT VMne
  • VMware 中搭建 SylixOS 环境

    1 制作 x86 平台 U 盘启动盘 详细步骤见 RealEvo IDE 使用手册 第八章 制作成功后插入 U 盘 2 创建 VMware 虚拟机设备 打开 VMware 这里使用版本为 15 5 6 点击 创建新的虚拟机 按如下步骤创建虚
  • 作用域和内存问题

    文章目录 一 基本类型和引用类型的值 基本类型和引用类型的区别 1 动态的属性 2 复制变量值 3 传递参数 4 监测类型 二 执行环境及作用域 1 延长作用域链 2 没有块级作用域 一 基本类型和引用类型的值 变量可能包括两种不同的数据类
  • C - 在内存被释放()后访问数据?

    我读了很多关于标准 C 中的 malloc 和 free 的内容 据我了解 您malloc 只为了一次记忆 然后你free 同样的记忆只有一次 这可能是不好的做法 但我明白 在你之后malloc 内存 您可以定义多个指向它的指针 而一旦你f
  • 如何在c中使用宏释放指针

    我想在 C 代码中编写宏来释放许多指针 如下所示 FREE ptr1 ptr2 ptr3 ptr4 ptrx 对我来说 这比 FREE ptr1 FREE ptr2 FREE ptr3 FREE ptr4 FREE ptrx 提前致谢 问候
  • 将tinyMCE与Angular 6一起使用,无需apikey(免费)

    我尝试使用 Angular 6 安装tinyMCE 我正在关注以下文档https www tiny cloud docs integrations angular2 一切正常 但我必须有一个 apiKey 才能使用tinyMCE 云 我收到
  • 无效写入——Valgrind

    您好 我在我的 c 程序中遇到了 munmap chunk invalid point 错误 主要问题是 我什至不确定指针可能变得无效的所有方式是什么 我已经检查了我的代码中是否有没有足够空间调用的字符串 但没有发现任何看起来会超出范围的情
  • 释放后的 ASAN 堆使用情况

    我正在运行 ASAN 来查找一个非常大的项目中的内存泄漏 我已找到原因 但不知道如何解决 我制作了一个示例程序来使问题易于理解 在下面的程序中 我只能解决指定的代码 对于其余代码 无法进行解决 因此 请建议我可能必须解决以下 ASAN 错误
  • 牛客字符串

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 对指针调用 free 两次

    我在讲座中被教导 召唤free 两次使用指针真的非常非常糟糕 我知道这是一个很好的做法 将指针设置为NULL 在释放它之后 然而 我仍然没有听到任何关于为什么会这样的解释 据我了解 方法malloc 有效 从技术上讲 它应该跟踪它已分配并供

随机推荐

  • 手写算法-FIFO

    一 思路 FIFO是英文First In First Out 的缩写 是一种先进先出的数据缓存器 他与普通存储器的区别是没有外部读写地址线 这样使用起来非常简单 但缺点就是只能顺序写入数据 顺序的读出数据 其数据地址由内部读写指针自动加1完
  • 什么是字节流?Java 中有哪些字节流

    在 Java 中 字节流是一种输入和输出数据的方式 它以字节为单位进行操作 字节流主要用于处理二进制数据 如图像 音频和视频等 在本文中 我们将介绍什么是字节流 Java 中的字节流有哪些以及一些示例代码 什么是字节流 字节流是输入和输出数
  • vue devtools安装及使用

    vue devtools使用 在vue学习开发之前 应安装vue devtools为我们提供一个界面 用来查看vue组件和全局状态管理器vuex中记录的数据 如果你可以访问google web store 请在store中安装 git cl
  • 解决:IDEA不能识别*.js文件

    在进行IDEA进行前端开发时 必不可少的会用到JavaScripts 在进行 js文件时 发现其不识别 为文本样式 如下图所示 Setting gt Editor gt File Types gt JavaScript gt 填写 js 这
  • ethers不同版本返回余额的整数值类型,以及对大整数值的处理差异性的比较

    目录 一 安装6v版本 二 安装5v版本 三 ethers 5v版本 1 获取余额 2 对于数值的处理
  • host command not found,host命令不可用的问题

    如果出现host command not found host命令不可用的问题 如果在centos环境下使用yum install bind utils进行安装bind utils的软件包 如果是unbuntu环境下可以使用sudo apt
  • Keil5编译——Error: L6218E: Undefined symbol

    1 具体问题 在初学RTThread着手最基础的 动态内存分配线程来控制LED闪烁 keil5编译时遇到以下的错误提示 STM32L431RC BearPiLED STM32L431RC BearPiLED axf Error L6218E
  • 今天软件开发面临的挑战

    1 开发模式的进化 2 软件工程意识的觉醒 3 软件过程的可视化管理 4 团队开发与合作 5 可重用性 可维护性和灵活性 6 质量控制和成本控制 7 加快上市时间 8 提高竞争优势
  • 街霸五显示登录服务器,pc版的街霸五如何登陆服务器

    发布时间 2016 03 27 Bungie与动视合作的首款FPS大作正式版将与9与9日登陆PS4和Xbox One PC版何在 动视目前已经确认PC版的正在制作中 但是动视并未透露详细的上市日期 不过已经有细心 标签 游戏资讯 游戏新闻
  • 窗函数设计FIR滤波器

    文章目录 实验原理 常见的窗函数 矩形窗Boxcar 巴特利特窗Bartlett 汉宁窗Hanning 哈明窗Hamming 布莱克曼窗Blackman 凯泽窗Kaiser 设计步骤 MATLAB实现 实验原理 有限单位冲激响应序列 h n
  • CV计算机视觉核心03-初步认识机器学习(线性回归模型、梯度下降法、线性回归模型解决数字识别问题(没用auto grad)、逻辑回归模型sigmoid、作业:线性回归解决数字识别auto grad)

    CV计算机视觉核心03 初步认识机器学习 线性回归模型 梯度下降法 区分一下回归模型和分类模型 线性回归模型解决数字识别问题 没有使用auto grad 逻辑回归模型 sigmoid函数 如何使用自动梯度计算 auto grad使用的注意事
  • SPEOS—光学产品设计及仿真工具

    SPEOS是ANSYS公司功能强大的光学仿真软件 用于光学设计 环境与视觉模拟 成像仿真等 强大的解决方案提供了可视化光学系统和直观的人机交互平台 其仿真技术已广泛用于汽车 电子电器 精密仪器 照明设备等领域 SPEOS软件内嵌ISO和CI
  • 01趣味算法 ---- 走进算法

    14天阅读挑战赛 努力是为了不平庸 算法学习有些时候是枯燥的 这一次 让我们先人一步 趣学算法 欢迎记录下你的那些努力时刻 算法学习知识点 算法题解 遇到的算法bug 等等 在分享的同时加深对于算法的理解 同时吸收他人的奇思妙想 一起见证技
  • go语言结构体与JSON序列化

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 易于人阅读和编写 同时也易于机器解析和生成 JSON键值对是用来保存JS对象的一种方式 键 值对组合中的键名写在前面并用双引号 包裹 使用冒号 分隔
  • Linux笔记_4(群组和文件目录属性)

    Linux笔记 4 标签 空格分隔 Linux 使用者与群组 1 在Linux里面 每个档案都有 Users Group Others 三种身份的权限 a 档案拥有者 b 群组 每个账号可以在多个群组中 c 其他人 2 预设情况下 系统上所
  • Word临时文件怎么恢复?可持续的文件恢复方法

    在word进行文档编辑时 有时候会发生误删除word文件的情况 这个时候word临时文件怎么恢复呢 其实word临时文件还存在于电脑中 本篇文章就来为大家讲解word临时文件怎么恢复 word临时文件在哪个文件夹 如果你在编辑文件时 没有手
  • STL迭代器简介

    标准模板库 The Standard Template Library STL 定义了五种迭代器 下面的图表画出了这几种 input output forward bidirectional random access 要注意 上面这图表并
  • 实现简易版——MyLinkedList

    class Node String val Node pre 双向 Node next Node String val this val val public class MyLinkedList private Node head 头结点
  • 视频号短视频创作需要注意的6个剪辑技巧(细节提高推荐率)

    昨天 老蒋有在 视频号短视频创作不能做的8件事情 文章中总结到我们在视频号创作短视频的时候几个不应该做的事情可能会导致账户被封 作品被限流的问题 继续接着这个话题 我们来聊一聊短视频需要注意的几个剪辑技巧 这些细节可能会提高用户的阅读体验
  • 频繁读写文件导致内存使用率过高

    最近接到一个客户反馈 说是服务器内存使用过高 总内存16G 使用top命令查看可用内存已经不足1G了 客户环境服务器为linux 部署了3个tomcat 每个tomcat均有大量的日志产生 让客户使用free m检查一下 此处有必要解释一下