内存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.hqwc.cn/news/267716.html

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

相关文章

【原创分享】Altium Designer 23全新PCB模块复用方法教程

"Reuse Blocks"功能即“复用块”功能是Altium Designer 23设计环境中的一项强大工具,它允许用户将先前创建的设计模块存储在一个可访问的库中,并在需要时将其插入到新的设计中。通过"Reuse Blocks",设计师可以节省大量时…

Scratch题库:6547网助力编程学习之路

随着科技的不断发展,编程已经成为了当今社会的一项重要技能。越来越多的家长和学校开始重视孩子们的编程教育,而Scratch作为一款适合儿童学习的编程语言,受到了广泛的关注。然而,面对琳琅满目的Scratch教程和题库,如何…

移液器吸头材质选择——PFA吸头在半导体化工行业的应用

PFA吸头是一种高性能移液器配件,这种材料具有优异的耐化学品、耐热和电绝缘性能,使得PFA吸头在应用中表现出色。那么它有哪些特点呢? 首先,PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性溶液还是有机溶剂,P…

python——第十七天

方法重写(overwrite) 、方法覆盖(override ):在继承的基础上,子类继承了父类的方法,如果不能满足自己使用,我们就可以重写或覆盖该方法 函数重载(overload): 在强数据类型的编程语言中(如Java、C、C等等): 函数名称…

外贸:这些你可能并不知道

昨天我打开平台,然后发现有一个产品被限流了,限流的原因是有客户投诉产品的价格和实际销售的价格不符,然后查看产品,发现是之前很久发布的一款产品,于是赶紧删除了。 以往,我们在平台上发布产品的时候为了…

如何将用户有过行为的item用list形式记录下来,另外如何计算list里的个数

导语: 最近做项目,发现有些语法想一想是知道,但实际操作起来跟想的情况不一样哈哈。不是遇见bug就是输出的结果不是自己想要的,CSDN跟知乎找了很多没怎么解决,后面多摸索多实操终于解决! test_data[item_…

基于KEDA的Kubernetes自动缩放机制

KEDA以事件驱动的方式实现Kubernetes Pod的动态自动扩容机制,以满足不同的负载需求,从而提高应用可伸缩性和弹性。原文: Dynamic Scaling with Kubernetes Event-driven Autoscaling (KEDA) Kubernetes是容器编排平台的事实标准,已经彻底改变…

【TCP/IP协议】LDAP,轻型目录访问协议(Lightweight Directory Access Protocol)

文章目录 LDAP名词解释LDAP protocolLDAP协议的特点LDAP的主要功能和用途LDAP工作原理LDAP的工作步骤LDAP查询范例 LDAP数据组件LDAP操作类型LDAP认证类型LDAP可能的风险如何保护LDAP推荐阅读 LDAP名词解释 LDAP,全称轻型目录访问协议(Lightweight Dire…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离:2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号,告诉单片机我准备好了,然后该超声波…

springcloud微服务篇--1.认识微服务

一、服务架构演变。 单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单 ,部署成本低。 缺点:耦合度高 分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立项…

【FAQ】推送前台应用的通知处理功能没生效,如何进行排查?

一、前台应用的通知处理简介 在调用推送接口时可以设置“foreground_show”字段控制前台应用的通知栏消息是否通过NC展示。“foreground_show”默认值为“true”,应用在前台时由NC展示通知栏消息;当设置为“false”时,应用在前台时&#xff…

Kotlin基础——基础内容

文章目录 1 函数和变量1.1 基本程序1.2 函数1.3 变量1.3.1 变量的类型推导1.3.2 可变变量和不可变量1.3.3 变量使用规则 1.4 字符串模板 2 类和属性2.1 属性2.2 自定义访问器2.3 目录和包2.3.1 同包访问2.3.2 不同包导入2.3.3 包名类名定义规则 3 枚举和“when”3.1 声明枚举类…