概述
前言
本文主要是从的角度来谈Curve的内存管理,不需要开发者开发中的一些内存管理理论,目的是我们在软件过程中对Linux内存管理的、内存问题分析的分享给曲线实践过程中发生了两次相关的问题。
-
chunkserver 上内存无法释放
-
mds 出现缓慢增长的现象
大部分开发阶段的内存占用很严重,发现阶段大压力稳定测试(7*7*24 小时以上)、测试异常通常在运行时比较容易出现问题,当然这还需要我们在测试阶段突然出现,除了关注 io 相关的测试指标外,监视服务端内存/CPU/网卡等资源使用情况以及采集的指标是否符合条件。比如上面的问题md缓慢增长 ,如果只关注是否正常,在测试阶段是无法发现的。内存问题出现之后也不容易,尤其是在大型软件的情况下。
本文主要是从的角度来谈Curve的内存管理,不需要开发者开发中的一些内存管理理论,目的是我们在软件过程中对Linux内存管理、内存问题分析的一些看法分享给大家。本文会从以下几个方面展开:
-
Curve软件说明计算分布。
-
内存策略。说明分配器的必要性,以及需要解决分配的问题和具有的特点,通过示例说明包括一个分配器的内存管理方法。
-
Curve 的内存管理。介绍当前 Curve 软件内存分配器的选择及原因。
Curve是区块链存储云计算基金会)沙盒,由易建网的项目(CNCF、易维、云的存储运营系统)组成,由块Curve和云文件存储运营系统两部分组成。
2
地理分布
在说计算管理之前,首先简要介绍下分配的相关知识。物理内存是真实的就是内存条;虚拟内存存在,为进程隐藏了物理内存概念,为进程提供了方便的接口和复杂性。需要抽象虚拟内存?虚拟内存和物理内存是如何映射管理层的?物理处理讨论范围是什么?这些虚拟内存的问题不在此处。
Linux 为每个进程维护了一个单独的虚拟地址空间,包括两个部分进程虚拟存储器(用户空间)和内核虚拟存储器(内核空间),本文主要讨论进程可操作的用户空间,形式如下图。
现在我们使用我们
pmap 查看运行中的curve-mds虚拟空间的分发。
pmap 查看用于进程的内存画面信息,该命令读取
/proc/[pid]/maps 中的信息。
// pmap -X {进程id} 查看进程内存分布
sudo pmap -X 2804620
// pmap 获取的 curve-mds 内存分布有很多项
Address Perm Offset Device Inode Size Rss Pss Referenced Anonymous ShmemPmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked Mapping
// 为了方便展示这里把从 Pss 后面的数值删除了, 中间部分地址做了省略
2804620: /usr/bin/curve-mds -confPath=/etc/curve/mds.conf -mdsAddr=127.0.0.1:6666 -log_dir=/data/log/curve/mds -graceful_quit_on_sigterm=true -stderrthreshold=3
Address Perm Offset Device Inode Size Rss Pss Mapping
c000000000 rw-p 00000000 00:00 0 65536 1852 1852
559f0e2b9000 r-xp 00000000 41:42 37763836 9112 6296 6296 curve-mds
559f0eb9f000 r--p 008e5000 41:42 37763836 136 136 136 curve-mds
559f0ebc1000 rw-p 00907000 41:42 37763836 4 4 4 curve-mds
559f0ebc2000 rw-p 00000000 00:00 0 10040 4244 4244
559f1110a000 rw-p 00000000 00:00 0 2912 2596 2596 [heap]
7f6124000000 rw-p 00000000 00:00 0 156 156 156
7f6124027000 ---p 00000000 00:00 0 65380 0 0
7f612b7ff000 ---p 00000000 00:00 0 4 0 0
7f612b800000 rw-p 00000000 00:00 0 8192 8 8
7f612c000000 rw-p 00000000 00:00 0 132 4 4
7f612c021000 ---p 00000000 00:00 0 65404 0 0
.....
7f6188cff000 ---p 0026c000 41:42 37750237 2044 0 0
7f61895b7000 r-xp 00000000 41:42 50201214 96 96 0 libpthread-2.24.so
7f61895cf000 ---p 00018000 41:42 50201214 2044 0 0 libpthread-2.24.so
7f61897ce000 r--p 00017000 41:42 50201214 4 4 4 libpthread-2.24.so
7f61897cf000 rw-p 00018000 41:42 50201214 4 4 4 libpthread-2.24.so
7f61897d0000 rw-p 00000000 00:00 0 16 4 4
7f61897d4000 r-xp 00000000 41:42 50200647 16 16 0 libuuid.so.1.3.0
7f61897d8000 ---p 00004000 41:42 50200647 2044 0 0 libuuid.so.1.3.0
7f61899d7000 r--p 00003000 41:42 50200647 4 4 4 libuuid.so.1.3.0
7f61899d8000 rw-p 00004000 41:42 50200647 4 4 4 libuuid.so.1.3.0
7f61899d9000 r-xp 00000000 41:42 37617895 9672 8904 8904 libetcdclient.so
7f618a34b000 ---p 00972000 41:42 37617895 2048 0 0 libetcdclient.so
7f618a54b000 r--p 00972000 41:42 37617895 6556 5664 5664 libetcdclient.so
7f618abb2000 rw-p 00fd9000 41:42 37617895 292 252 252 libetcdclient.so<
最后
以上就是难过绿草为你收集整理的解析曲线 资源占用之内存管理的全部内容,希望文章能够帮你解决解析曲线 资源占用之内存管理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复