sslvpn可伸缩内存池方案

sslvpn可伸缩内存池方案

ID:41849676

大小:164.11 KB

页数:6页

时间:2019-09-03

sslvpn可伸缩内存池方案_第1页
sslvpn可伸缩内存池方案_第2页
sslvpn可伸缩内存池方案_第3页
sslvpn可伸缩内存池方案_第4页
sslvpn可伸缩内存池方案_第5页
资源描述:

《sslvpn可伸缩内存池方案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、问题背景:H前基于SSLVPN业务内存在高并发情况下内存使用达1G以上,且流量停下来后,内存虽然已经被SSLVPN进程释放了,但是GLIBC不能及时把内存归还给OS,是曲于OS内核对于128K以下的内存通过brk方式管理,进程释放后,会缓存在GLIBC内。而128K以上内存则通过nmap方式管理,进程释放后,会及时归还给OS。而SSLVPN业务内存很多内存基木上都采取brk方式管理,导致内存最后不能及时归还给OS。Sslvpntop-c进程占用内存问题,可以通过下述无内存泄露代码验证:#include#include#defineMEM_SPEC_MAX1

2、0000000void*g_mem[MEM_SPEC_MAX]={0};voidmain(){inti=0;for(i=1;i

3、

4、(i+500>MEM_SPEC_MAXJ)printff'currentmallocidxis:%d,pleasewaiting....n,i);g_mem[i]=malloc(rand()%1024);}printf(Hpressanykeytofreethememory11);getcharQ;for(i=1;i

5、]=0;if(0==i%1000000

6、

7、(i+500>MEM_SPEC_MAX))printf(Hcurrentfreeidxis:%d、pleasewaiting•….u,i);}printf(utheusedmemoryhasfreesucess,theprocesssmwillgotosleep……u);while(l){sleep(lO);查看现彖如H:程序free所有内存后,top-c看到内存还冇3.2G。而修改上面的malloc内存大小更改为1M,则最fdsleep后,内存只占用几百k。基于GLIBC的内存管理策略,我们的业务内存管理就尽量让内核的内存管理基于nmap策略

8、去管理,基于此策略提供下而的内存池优化思想。通过实现用户态内存池希望完成如F口标:1)、解决用户态程序glibc基于brk方式缓存的内存长时间不归还问题(目前不采取内存池经验证也有可行的方法)。2)、提供开发可控的内存分呢,以跟踪业务内存使用情况来方便定位业务内存泄露问题。3)、基于预先创建好的内存池,避免业务使用内存时,每次需要向系统分配内存(用户态到内核态的系统调用),以提升内存分配性能。4)、尽可能减少频繁申请释放,持续长时间运行则会在glibc里产生大量的内存碎片,进而影响内存利用效率。5)、内存池实现需要考虑线程安全。6)、内存池实现尽可能简单、可复用,以lib库方式可以独立提供给业

9、务使用。基于上述H标有下而几种内存池构思:1、系统初始化时,一次性分配若干数目固定大小的内存,比如一次性分配8字节内存多少个节点,16字节内存多少个节点,32字节・・・・・1024。这种思想很简单但不灵活,而且可能存在内存浪费,因就算没有大量业务时,内存也在初始化时就分配好了。2、内存池支持在内存规格范围内动态伸缩:假定某款设备内存垠多支持3000并发用户所需耍的内存为2G的话,则系统为VPN满规格时所分配的内存最多为2G。系统初始化时一次性分配10M内存(格式化为4,8,16,・・•・,10172大小的内存块),后续每10M扩充内存(格式化为4,8,16,…10172大小的内存块,可以先格式

10、化一些常用的大小,可动态调整内部的小内存块,这些小内存块竞争使用)。这种内存池可用如下图來表示:基于GLIBC的内存管理策略,我们的业务内存管理就尽量让内核的内存管理基于nmap策略去管理,基于此策略提供下而的内存池优化思想。通过实现用户态内存池希望完成如F口标:1)、解决用户态程序glibc基于brk方式缓存的内存长时间不归还问题(目前不采取内存池经验证也有可行的方法)。2)、提供开发可控的内存分呢,以跟踪业务内存使用情况来方便定位业务内存泄露问题。3)、基于预先创建好的内存池,避免业务使用内存时,每次需要向系统分配内存(用户态到内核态的系统调用),以提升内存分配性能。4)、尽可能减少频繁申

11、请释放,持续长时间运行则会在glibc里产生大量的内存碎片,进而影响内存利用效率。5)、内存池实现需要考虑线程安全。6)、内存池实现尽可能简单、可复用,以lib库方式可以独立提供给业务使用。基于上述H标有下而几种内存池构思:1、系统初始化时,一次性分配若干数目固定大小的内存,比如一次性分配8字节内存多少个节点,16字节内存多少个节点,32字节・・・・・1024。这种思想很简单但不灵活,而且可能存在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。