nginx+php-fpm整体上线k8s集群之后虚拟内存不断上涨原因排查

news2024/11/15 9:38:55

背景

为了可以更好的管理我们的lnmp集群,打算将原有的php环境整体打包成一个镜像然后上到k8s容器,这样可以不仅使用到k8s的快速扩缩容和管理的好处,而且让机器资源能更好被利用,减少机器数量

问题

当我们将流量从原有的php机器集群切换到k8s集群时,发现php容器的虚拟内存一直再涨,然后达到一个阈值之后就会开始回落,然后又继续上涨,表现如下

 

 原因

一开始我们还以为内存泄露了,不过内存泄露的话,内存使用率只会一直往上涨,这里有回落,说明大概率不是内存泄露

而经验老到的运维说这很有可能是因为PHP程序写日志到所在pod上,而根据linux系统的特性,写文件不会立马落盘,而是先写到本地缓存里,等达到一定量级之后才会落盘,这也就解释为什么虚拟内存会一直上涨,然后又会回落,最后就是这么反反复复

实验

在测试机写一个php接口,这个接口的功能就是写大量的日志数据,然后使用 ab来对这个接口进行压测,结果如下

确实会涨,这说明写日志确实会导致内存使用率的上涨

内存使用过程是如何的

既然知道这个问题的根源,那接下来简单讲讲这个内存使用过程是怎么导致会出现这个情况

首先先要知道

WSS(Working Set Size)和 RSS(Resident Set Size)是内存管理中两个相关但不同的概念。

WSS指的是当前进程正在使用的内存,包括其虚拟地址空间中已分配但未被使用的内存,以及已经被使用的内存页。换句话说,WSS是当前进程使用的活动内存。

而RSS则指的是当前进程使用的物理内存,也就是占用了进程物理内存的内存页数。RSS是用来衡量进程实际使用的物理内存大小。

因此,WSS通常比RSS要大。这是因为WSS包括了未使用但已分配的内存和已使用的内存,而RSS只包括已经占用了物理内存的内存页。

另外,WSS也会受到操作系统内存管理机制的影响,如内存页面换入换出机制等。在这些机制的调度下,可能会导致某些已使用但未活动的内存页被移出物理内存,从而导致WSS的变化。

而linux自身会有个文件缓存,主要作用是用来防止程序对文件的频繁操作从而导致对加大对磁盘的读写,先将文件存入缓存,等到合适时机再将文件写入到磁盘里

 衍生问题

从上面可以看出,k8s的pod运行了linux系统,而如果多个pod对同一个文件进行读写,会不会导致这个文件数据不一致呢

这个问题k8s主要是使用Kubernetes Volume 的方案来保证数据的一致性,多个pod挂载了同一个存储卷

从逻辑上pod本身的文件缓存是有可能导致文件的不一致,不过这一点借助强大亚马逊云提供的EKS集群很好的解决了这个问题,不过具体怎么解决确实难懂,这里就不再进行赘述了 

 

 

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

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

相关文章

Elasticsearch的安装及常用操作

文章目录一、Elasticsearch的介绍1、Elasticsearch索引2、Elasticsearch的介绍二、Elasticsearch的安装1、安装ES服务2、安装kibana3、Docker安装ES4、Docker安装Kibana三、ES的常用操作1、索引操作2、文档操作3、域的属性3.1 index3.2 type3.3 store总结一、Elasticsearch的介…

关于云计算,我们问了ChatGPT 10个问题

ChatGPT懂云计算吗?前些天,我们问了ChatGPT(非Plus收费版)一些问题。1. 什么是云计算?2. 云计算行业的护城河是什么?3. 什么是云原生?4. 微软Azure与亚马逊AWS的主要区别是什么?5. 为…

你真的会做APP UI自动化测试吗?我敢打赌百分之九十的人都不知道这个思路

目录 前言 一,开发语言选择 二,UI测试框架选择 1,Appium 2,Airtest 3,选择框架 三,单元测试框架选择 四,测试环境搭建 1,测试电脑选择 2,测试手机选择 3&#…

6.关于系统服务的思考—— native vs java

文章目录native服务 以sensor service为例Native 服务java 服务, 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…

SQL语句创建视图:

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…

基于SpringBoot的在线文档管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

进程-操作系统结构

进程-操作系统结构 中文仅本人理解,有错误请联系我。 操作系统为不同方面服务,有不同的设计角度。 为用户: 使用 为程序员:创造 程序员需要关注的就是system call接口的调度 file systems:ntfs,ext4 commu…

eclipse快捷开发学习笔记

快速收起java类中的所有代码当类中方法过多时,收起所有方法,可以方便查看注释找到方法右击左侧栏任意行号位置-点击Folding-点击Collapse All效果图如下代码格式化混乱的代码格式化后,方便阅读分析菜单栏-Source-Format效果如下3.查看方法被哪…

Bland-Altman图

介绍 Bland-Altman图是一种一致性评价测量方法,简称BA,常用于医学实验和数据分析。 可使用它检测两组数据的一致性,比如对比新旧两种方法,对比一组实际值和预测值等。相对于校准曲线,它能更好地对比两组数据中每个数据…

Unit Test and Integration Test

Unit Test and Integration Test Background It is the first time that I try to write an article in English. In the past, I didn’t write test code. Just thinking QA is responsible for testing. As a developer, I don’t need to care about tests. Although I …

Robust Self-Augmentation for Named Entity Recognition with Meta Reweighting

摘要 近年来,自我增强成为在低资源场景下提升命名实体识别性能的研究热点。Token substitution and mixup (token替换和表征混合)是两种有效提升NER性能的自增强方法。明显,自增强方法得到的增强数据可能由潜在的噪声。先前的研究…

【Vue3源码】第四章 实现isReadonly和isReactive

【Vue3源码】第四章 实现isReadonly和isReactive 前言 上一章节我们实现readonly API,并且优化之前写的reactive API。这一章我们实现isReadonly和isReactive两个API。 1、实现isReactive 官网是这么介绍的:检查一个对象是否是由 reactive() 或 shallo…

WebView2 (Chromium) 右键菜单大全

在开发WebView2浏览器时,需要定制右键上下文菜单,但是微软的官方网站上没有详细的菜单,这里整理出来,以方便大家使用。以下是在win11上测试获取的,经过测试win7上稍有不同。一、网页上空白处右键 Target:Pa…

Mybatis Notes

文章目录1 Mybatis 介绍1.1 快速入门2 JDBC2.1 JDBC介绍2.3 JDBC问题分析2.4 Mybatis与JDBC技术对比3 数据库连接池3.1 数据库连接池介绍3.2 数据库连接池产品产品3.3 Druid引入项目4lombok4.1 lombok介绍4.2 lombok使用4.2.1 在pom.xml文件中引入依赖4.2.2 pojo类代码引入1 My…

强化学习 Reinforcement Learning(1) ~ 介绍

1. 强化学习概念和分类 强化学习,Reinforcement Learning 通过价值选行为: Q LearningSarsaDeep Q Network 直接选行为: Policy Gradients 想象环境并从众学习: Model Based RL 1.1 通过环境分类 1.1.1 不理解环境 Model-Fr…

4.5 习题(王晓云 主编)

一、选择题1. 下面( ) 是错误的if 语句&#xff08;设int x,a,b;&#xff09;BA&#xff09;if (ab) x; B&#xff09;if (a<b) x;C&#xff09;if (a-b) x; D&#xff09;if (x ) x;2. 以下程序片段( )。Dvoid main ( ){int x0,y0,z0;if (xyz) printf(“***”);else printf…

RT-Thread SP使用教程

RT-Thread SPI 使用教程 实验环境使用的是正点原子的潘多拉开发板。 SPI从机设备使用的是BMP280温湿度大气压传感器。 使用RT-Thread Studio搭建基础功能。 1. 创建工程 使用RT-Thread Studio IDE创建芯片级的工程。创建完成后&#xff0c;可以直接编译下载进行测试。 2.…

JVM学习篇垃圾收集器ParNewCMS与底层三色标记算法详解

1. 垃圾收集算法 2. 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法…

因果推断7--深度因果模型综述(个人笔记)

目录 0摘要 1介绍 2预习 3治疗和指标 4深层因果模型的发展 4.1发展时间表 4.2模型分类 5典型的深层因果模型 6实验指南 6.1数据集 6.2code 6.3实验 7结论 参考 编码 1.自编码器(AE)&#xff1a; 2.去噪自编码器(DAE) 3.变分自编码器VAE 4.去耦变分自编码 文章…

复旦MBA父女“接力”,圆梦复旦|校友故事

父亲&#xff1a;钱一&#xff0c;2006级复旦MBA校友      女儿&#xff1a;钱盈&#xff0c;2017级财务管理本科&#xff0c;金融硕二年级在读      在管院的众多校友中&#xff0c;有这样一对父女&#xff1a;2006年&#xff0c;父亲钱一考上了复旦MBA&#xff0c;每…