Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >日更系列:一次线上服务内存问题

日更系列:一次线上服务内存问题

原创
作者头像
mariolu
发布于 2022-01-29 08:51:49
发布于 2022-01-29 08:51:49
79200
代码可运行
举报
运行总次数:0
代码可运行

线上预估服务节前升级到线上,元旦假期出现了P99耗时超过检测阈值。因为正值节假日应用商店流量都有增长,便直观想简单扩容进行解决。但是简单看了下观察了cpu和内存,都是不忙。然后再细看内存里的各种统计指标。有两项指标MEM实际使用率和MEM CACHED这两项几乎涨到了物理内存的上限。实际使用率使用到了90%。观察到上涨的时机正是预估模型每天更新时间点,而且涨了之后并不会跟随pv变化而明显变化。

自然想到排查模型加载和mem cached增长的关联,应用商店ctr预估训练模型可以达到30G以上。每次读文件到内存加载都会花费几分钟时间。而cached相当于free的buff/cache部分。

查了下资料:

Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。

Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。

Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。

Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘

事实上,proc 文件系统同时也是很多性能工具的最终数据来源。比如 free ,就是通过读取 /proc/meminfo ,得到内存的使用情况。

做个实验(写大文件),使用vmstat观察到mem的cache一直在涨:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先清理缓存
$ echo 3 > /proc/sys/vm/drop_caches
# 然后运行 dd 命令向磁盘分区 /dev/sdb1 写入 2G 数据
$ dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2048

再做个实验(读大文件),使用vmstat观察到mem的cache一直在涨:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先清理缓存
$ echo 3 > /proc/sys/vm/drop_caches
# 运行 dd 命令读取文件数据
$ dd if=/tmp/file of=/dev/null

总结:

到这里问题就很明确了,服务加载大模型文件,消耗了大量的mem cached,但是这个内存cache不会随着文件读取结束而消失。内存cache大量占用导致后续有请求进来分配内存需要时都被delay了,所以请求p99耗时都明显增加了。

那么如何手动规避模型更新后的遗留问题呢?使用以下命令清理系统缓存:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 清理文件页、目录项、Inodes 等各种缓存$ echo 3 > /proc/sys/vm/drop_caches

这里的 /proc/sys/vm/drop_caches ,就是通过 proc 文件系统修改内核行为的一个示例,写入 3 表示清理文件页、目录项、Inodes 等各种缓存。同时也学习到内存的一个知识:

Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么手工drop_caches之后cache值并未减少?
在Linux系统上查看内存使用状况最常用的命令是"free",其中buffers和cache通常被认为是可以回收的:
刘盼
2019/05/08
1.9K0
为什么手工drop_caches之后cache值并未减少?
性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
https://www.cnblogs.com/poloyy/category/1806772.html
小菠萝测试笔记
2020/08/18
9900
性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
内存中的Buffer和Cache
在正式讲解两个概念前,你可以先想想,你有没有什么途径来进一步了解它们?除了中文翻译直接得到概念,别忘了,Buffer 和 Cache 还是我们用 free 获得的指标。
HaydenGuo
2019/12/13
1.7K0
内存中的Buffer和Cache
Linux 内存使用过高排查
Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches
用户5760343
2019/10/24
9.8K0
Linux 内存中的缓冲区(Buffer)与缓存(Cache)
但是让我问你,由于 Buffer 只是将写入磁盘的数据的缓存。反过来,它还会缓存从磁盘读取的数据吗?或者 Cache 是从文件中读取数据的缓存,那么它是否也为写入文件缓存数据呢?
大数据学习与分享
2023/02/26
3.9K0
Linux 内存中的缓冲区(Buffer)与缓存(Cache)
Linux内存分析与清理
可以看出buff/cache占用的内存份额很大,有时候程序运行结束后,大量内存仍位于buff/cache中,有时运行程序会导致内存不足,因此需要将这部分内存释放出来。
Tyan
2019/05/25
9.7K1
Linux内存(手动释放cache)
项目的扩容申请了一台机器,到手之后看一下机器的指标,看到内存使用情况是这样的。 1、查看内存 free $ free -h total used free shared buffers cached Mem: 125G 89G 36G 92K 212M 74G -/+ buffers/cache: 14G 111G Swap
用户1225216
2018/03/05
11K0
linux下的缓存机制及清理buffer/cache/swap的方法梳理
1)缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。 缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。 CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行
洗尽了浮华
2018/01/23
5.7K0
性能之内存篇
最近笔者在看性能分析相关的是知识,就特意针对内存整理了这一篇文章,在这里笔者主要从下面三个方面来介绍这方面的知识: 1.内存的作用是什么,他在操作系统中的基础知识都有哪一些? 2.查看内存和内存相关问题涉及到的工具都有哪一些,他们的使用方式是什么样子的? 3.碰到内存问题的时候,我们需要怎么去定位呢?
灰子学技术
2022/06/25
1.3K0
性能之内存篇
Linux-手动释放linux内存cache
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。
小小工匠
2021/08/16
6.2K0
聊聊linux的文件缓存
linux使用page cache来缓存最近读取的文件,也有目录结构(dcache: Directory Entry Cache)缓存及inode缓存,它们都使用了LRU算法来管理这些page及dentries cache
code4it
2024/04/17
3700
Linux 中关于缓存释放的详解与配置
在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,例如当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。,此时就需要执行释放内存(清理缓存)的操作了。
跟着飞哥学编程
2023/03/23
3.4K0
Linux系统内存爆满的快速解决办法!
第一部分Mem行: total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 当前已经废弃不用 buffers Buffer 缓存内存数 cached Page 缓存内存数
程序猿的栖息地
2022/04/29
1.4K0
美创运维日记|我的内存都去哪里了?
在疫情期间,小编不得不待在家中远程办公。但变的是办公方式,不变的是美创运维的7*24小时不间断支持。
数据安全
2020/08/19
1.7K0
美创运维日记|我的内存都去哪里了?
linux下清理系统缓存并释放内存
原文链接:https://rumenz.com/rumenbiji/linux_drop_caches.html
入门笔记
2021/11/15
9.9K0
Linux性能调优之内存负载调优的一些笔记
「 原谅和忘记就意味着扔掉了我们获得的最贵经验 -------《人生的智慧》叔本华」
山河已无恙
2023/01/30
2.7K0
Linux性能调优之内存负载调优的一些笔记
一文解释Linux 的内存、Swap、Cache、Buffer
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。
星哥玩云
2022/08/19
2.3K0
一文解释Linux 的内存、Swap、Cache、Buffer
关于 Linux中缓存清理的一些笔记
归根结底,长得好,无论男女,怎么都是对的,长得不好看,大概就是万般皆罪。——烽火戏诸侯《剑来》
山河已无恙
2023/03/02
1.1K0
Linux命令(37)——free命令
free命令用于显示系统内存使用情况,包括物理内存(Physical Memory)、虚拟内存(Swap Memory)、共享内存(Shared Memory)以及内核使用的缓冲(Buffers)与缓存(Cached)大小。在Linux系统监控的工具中,free命令是最经常使用的命令之一。
恋喵大鲤鱼
2018/08/03
1.9K0
Linux内存、Swap、Cache、Buffer详细解析
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。
用户1278550
2021/04/23
3.6K0
相关推荐
为什么手工drop_caches之后cache值并未减少?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验