内存cache大量使用问题导致应用异常问题

概述

28s应用崩溃查看内存使用有大量cache。

分析

  1. 查看free 信息平时的确存在大量cache使用的情况
  2. 查看dmes信息发现filesendserver崩溃

崩溃信息为系统调用  查看到page allocation failure:order 5

  1. 同时也看到系统内存使用情况

查看到系统实际还有部分内存为空闲内存,但是观察mode 0 Nornal 内存中有部分连续内存页使用完了。而恰巧重新申请的是order 为5的内存,查看内核中__get_free_pages()函数对于系统内存分配说明order参数是系统要分配的2的order次方的数量的连续内存页申请,这里对应的就是2的5次方4k连续内存页128kb内存的申请。因此应用崩溃的原因为,系统内存碎片化导致的。

  1.  同时还观察到系统find进程异常

同样查看内存使用情况为申请2的8次方4k连续内存页1024kb内存的申请同样查看为内存没有。

  1. 内存碎片化严重有2种解决思路

1 找到大量吃cache的进程进行程序的优化

2 调整系统预留内存修改vm.min_free_kbytes = 1153434

关于系统内存有pages_high  pages_low  pages_min 3条水位线

大概的关系换算关系的是

watermark[min] = per_zone_min_free_pages (min_free_kbytes换算为page单位)

watermark[low] = watermark[min] * 5 / 4

watermark[high] = watermark[min] * 3 / 2

系统内存使用达到pages_low才会开始回升cache,vm.min_free_kbytes可根据系统物理内存进行调节。

  1. 针对第一步情况我们进行了进一步的排查,通过脚本监控iotop信息发现find程序有长时间的读写操作。

和上面应用出现异常同时find程序异常相对应。同时观察到时间得到每天的9点5分开始 9点55多还在运行,同时查看syslog日志每天的9点5只有corn.daily执行。

查看到locate比较像每天会执行一次updatedb。手动运行updatedb命令发现ps查看的一模一样。updatedb主要用于生产系统所有文件的路径和文件名索引。

结论

查看了 df -h系统有大概220g的文件,该问题是由于系统updatedb命令在执行find遍历系统所有文件是占用了大量的buff导致的系统内存碎片化最终使得应用奔溃。

用户最终采取了以下措施解决该问题

  1. 删除了locate 定时任务
  2. 修改了vm.min_free_kbytes = 1153434
  3. 修改了/etc/crontab文件修改了每日定时任务的启动时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android开发-26】Android中服务Service详细讲解

1,service的生命周期 Android中的Service,其生命周期相较Activity来说更为简洁。它也有着自己的生命周期函数,系统会在特定的时刻调用对应的Service生命周期函数。 具体来说,Service的生命周期包含以下几个方法: on…

[笔记] 使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统,需要从零开始搭建系统,由于教程中给的虚拟机搭建的方式感觉还是过于重量级,因此研究了一下通过 qemu 模拟器,配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器,…

Linux上进行Nacos安装

Nacos安装指南 仅供参考,若有错误,欢迎批评指正! 后期会继续上传docker安装nacos的过程! 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好…

《C++新经典设计模式》之第7章 单例模式

《C新经典设计模式》之第7章 单例模式 单例模式.cpp 单例模式.cpp #include <iostream> #include <memory> #include <mutex> #include <vector> #include <atomic> using namespace std;// 懒汉式&#xff0c;未释放 namespace ns1 {class Gam…

手动搭建koa+ts项目框架(日志篇)

文章目录 前言一、安装koa-logger二、引入koa-logger并使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架&#xff08;路由篇&#xff09;新增日志记录 一、安装koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一题】【12.11】1631.最小体力消耗路径

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 1631. 最小体力消耗路径https://leetcode.cn/problems/path-with-minimum-effort/这道题目的核心思路是&#xff1a;使用了二分查找和BFS &a…

PHP基础(2)

目录 一、PHP 数据类型 二、PHP 字符操作函数 strlen() str_word_count() strrev() strpos() str_replace() 一、PHP 数据类型 PHP 有八种基本数据类型和两种复合数据类型&#xff1a; 整型&#xff08;int&#xff09;&#xff1a;表示整数&#xff0c;可以是正数或负数&am…

线程Thread源代码思想学习1

1.启动线程代码 public class MultiThreadExample {public static void main(String[] args) {// 创建两个线程对象Thread thread1 new Thread(new Task());Thread thread2 new Thread(new Task());// 启动线程thread1.start();thread2.start();} }class Task implements Ru…

EXPLAIN 执行计划

有了慢查询语句后&#xff0c;就要对语句进行分析。一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划&#xff0c;这个执行计划展示了接下来具体执行查询的方式&#xff0c;比如多表连接的顺序是什么&#xff0c;对于每个表采用什么访…

记录 DevEco 开发 HarmonyOS 应用开发问题记录 【持续更新】

HarmonyOS 应用开发问题记录 HarmonyOS 应用开发问题记录一、预览器无法成功运行?如何定位预览器无法编译问题? 开发遇到的问题 HarmonyOS 应用开发问题记录 一、预览器无法成功运行? 大家看到这个是不是很头疼? 网上能看到许多方案,基本都是关闭一个配置 但是他们并…

InitializingBean初始化--Spring容器管理

目录 InitializingBean--自动执行一些初始化操作spring初始化bean有两种方式&#xff1a;1.优点2.缺点2.PostConstruct 注解2.举例使用InitializingBean接口 和PostConstruct3.初始化交给容器管理4.与main入口函数有什么区别5.在 Spring 中&#xff0c;有两种主要的初始化 bean…

【Java SE】带你识别什么叫做异常!!!

&#x1f339;&#x1f339;&#x1f339;个人主页&#x1f339;&#x1f339;&#x1f339; 【&#x1f339;&#x1f339;&#x1f339;Java SE 专栏&#x1f339;&#x1f339;&#x1f339;】 &#x1f339;&#x1f339;&#x1f339;上一篇文章&#xff1a;【Java SE】带…

Android获取Wifi网关

公司有这样一个应用场景&#xff1a;有一台球机设备&#xff0c;是Android系统的&#xff0c;它不像手机&#xff0c;它没有触摸屏幕&#xff0c;所以我们对球机的操作很不方便&#xff0c;于是我们搞这样一个设置&#xff1a;点击球机电源键5次分享出一个热点&#xff0c;然后…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机…

C++类模板不是一开始就创建的,而是调用时生成

类模板中的成员函数和普通类中成员函数创建时机有区别的&#xff1a; 普通类中的成员函数一开始就可以创建模板类中的成员函数调用的时候才可以创建 总结;类模板中的成员函数并不是一开始就创建的&#xff0c;再调用时才去创建 #include<iostream> using namespace st…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

Vue中$props、$attrs和$listeners的使用详解

文章目录 透传属性如何禁止“透传属性和事件”多根节点设置透传访问“透传属性和事件” $props、$attrs和$listeners的使用详解 透传属性 透传属性和事件并没有在子组件中用props和emits声明透传属性和事件最常见的如click和class、id、style当子组件只有一个根元素时&#xf…

jOOQ指南中使用的数据库

jOOQ指南中使用的数据库 本指南中使用的数据库将在本节中进行总结和创建 使用Oracle方言来创建 # 创建语言 CREATE TABLE language (id NUMBER(7) NOT NULL PRIMARY KEY,cd CHAR(2) NOT NULL,description VARCHAR2(50) );# 创建作者 CREATE TABLE author (id NUMBER(7) NOT …

mysql:需要准确存储的带小数的数据,要使用DECIMAL类型

需要准确存储的带小数的数据&#xff0c;要使用DECIMAL&#xff0c;特别是涉及金钱类的业务。而不要使用FLOAT或者DOUBLE。 因为DECIMAL是准确值&#xff0c;不会损失精度。 而FLOAT或者DOUBLE是近似值&#xff0c;会损失精度。 https://dev.mysql.com/doc/refman/8.2/en/fixe…

差生文具多系列之最好看的编程字体

&#x1f4e2; 声明&#xff1a; &#x1f344; 大家好&#xff0c;我是风筝 &#x1f30d; 作者主页&#xff1a;【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正&#xff0c;不胜感激。 直达博主&#xff1a;「…