免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4290 | 回复: 8
打印 上一主题 下一主题

[proxy] ATS内存管理优化已经提交社区主干分支 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-05 00:37 |只看该作者 |倒序浏览
本帖最后由 aaaaaa 于 2013-02-05 18:33 编辑

我们已经将内存优化的代码提交到社区的master分支,即这个优化将会出现在下次发布的开发版本里:3.3.1里。这个改进主要目的是解决内存分配中的不释放问题,使用的是一个内存回收功能,相关的参数有:


* proxy.config.allocator.enable_reclaim
  是否启用内存回收功能。这个参数的主要目的是让内存回收成为可以配置的功能,主要为让社区的老人们觉得新功能不是推翻重来的。代码默认目前是1,即启用回收。配置文件默认是0,即关闭回收。如是用git/master里的代码新装的配置文件会生效,即不启用。如果是从其他版本升级上来,由于records.config升级安装不会覆盖,代码默认配置会生效,即启用。这个一定要理解哦,我有可能后面再改这些默认值的。

* proxy.config.allocator.reclaim_factor
  是控制回收的阈值的,0.0-1.0的浮点数,默认0.3。越高越主动回收。

* proxy.config.allocator.max_overage
  定义超过阈值几次才回收,也是一个用来控制收缩算法启动的一个小开关,代码默认10。实测3效果比较好,新配置默认是3。

还有一个参数是debug用的,一般用不到
* proxy.config.allocator.debug_filter
  Dump debug information according bit mask of debug_filter, if a bit is set
  in the mask, then debug information of the corresponding action are dumped:
   bit 0: reclaim memory in ink_freelist_new
   bit 1: allocate memory from partial-free Chunks(if exist) or OS


如果要启用内存回收,请使用最新的git版本,从官方clone出来,带--enable-reclaimable-freelist编译,请设置proxy.config.allocator.enable_reclaim为1,并调节reclaim_facotr和max_overage到符合你的业务场景的数值。当然默认的参数也是能行的,是一个比较中庸的值。

论坛徽章:
0
2 [报告]
发表于 2013-02-05 09:56 |只看该作者
本帖最后由 llzqq 于 2013-02-05 10:05 编辑

恩,这个今天早上git时发现了,对TS来说是个重大好消息啊!

目前还不知道这个补丁的效率怎么样,能否把TS的内存使用严格限制在设定值内,还是说比原来的内存管理有较大改善呢?

论坛徽章:
0
3 [报告]
发表于 2013-02-05 16:31 |只看该作者
从我们测试结果和社区其他人反馈看,这个patch将会控制住内存使用程度。因为TS的内存主要有几个方面:
1,ram cache固定数量占用。
2,跟连接数和transaction数关联的内部结构数据占用
这两个都可以因为目前的patch在高峰占用过后,能回收回来。

FYI

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
4 [报告]
发表于 2013-02-05 17:49 |只看该作者
cool!

论坛徽章:
0
5 [报告]
发表于 2013-03-20 16:27 |只看该作者
最近在测试这个主干分支。但只是1个小时左右ATS就重启了。报如下错误,老大帮忙看一下,是不是这个内存回收方面的问题?
[TrafficServer] using root directory '/usr'
/usr/bin/traffic_server - STACK TRACE:
/lib/libtsutil.so.3[0x40031255]
/lib/libtsutil.so.3(reclaimable_freelist_new+0x6e[0x40031e28]
/lib/libtsutil.so.3(ink_freelist_new+0x1c)[0x40030fcc]
/usr/bin/traffic_server[0x8244e9c]
/usr/bin/traffic_server(_ZN7CacheVC10handleReadEiP5Event+0x1fd)[0x824c42d]
/usr/bin/traffic_server(_ZN7CacheVC12do_read_callEP7INK_MD5+0x7a)[0x826f67a]
/usr/bin/traffic_server(_ZN5Cache9open_readEP12ContinuationP7INK_MD5P7HTTPHdrP21CacheLookupHttpConfig13CacheFragTypePci+0x2e4)[0x826ada4]
/usr/bin/traffic_server(_ZN14CacheProcessor9open_readEP12ContinuationP3URLbP7HTTPHdrP21CacheLookupHttpConfigl13CacheFragType+0x87)[0x824c027]
/usr/bin/traffic_server(_ZN11HttpCacheSM18do_cache_open_readEv+0x4b)[0x815011b]
/usr/bin/traffic_server(_ZN11HttpCacheSM9open_readEP3URLP7HTTPHdrP21CacheLookupHttpConfigl+0x4[0x8150188]
/usr/bin/traffic_server(_ZN6HttpSM24do_cache_lookup_and_readEv+0x104)[0x8160864]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x746)[0x8177506]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x19a)[0x8176f5a]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM18state_api_callbackEiPv+0x72)[0x8176cd2]
/usr/bin/traffic_server(TSHttpTxnReenable+0x386)[0x80fba76]
/usr/lib/cacheurl.so[0x418e65a0]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x4bb)[0x817257b]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM32state_read_client_request_headerEiPv+0x239)[0x8164629]
/usr/bin/traffic_server(_ZN6HttpSM12main_handlerEiPv+0x66)[0x81754d6]
/usr/bin/traffic_server[0x8298972]
/usr/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x25[0x8290958]
/usr/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x7d)[0x82b867d]
/usr/bin/traffic_server(_ZN7EThread7executeEv+0x46b)[0x82b8fcb]
/usr/bin/traffic_server[0x82b7da4]
/lib/libpthread.so.0[0x4008747e]
/lib/libc.so.6(clone+0x5e)[0x403d53ce]
FATAL: Failed to mmap 987136 bytes, Cannot allocate memory
/usr/bin/traffic_server - STACK TRACE:
/lib/libtsutil.so.3[0x4002e6c4]
/lib/libtsutil.so.3[0x40031279]
/lib/libtsutil.so.3(reclaimable_freelist_new+0x6e[0x40031e28]
/lib/libtsutil.so.3(ink_freelist_new+0x1c)[0x40030fcc]
/usr/bin/traffic_server[0x8244e9c]
/usr/bin/traffic_server(_ZN7CacheVC10handleReadEiP5Event+0x1fd)[0x824c42d]
/usr/bin/traffic_server(_ZN7CacheVC12do_read_callEP7INK_MD5+0x7a)[0x826f67a]
/usr/bin/traffic_server(_ZN5Cache9open_readEP12ContinuationP7INK_MD5P7HTTPHdrP21CacheLookupHttpConfig13CacheFragTypePci+0x2e4)[0x826ada4]
/usr/bin/traffic_server(_ZN14CacheProcessor9open_readEP12ContinuationP3URLbP7HTTPHdrP21CacheLookupHttpConfigl13CacheFragType+0x87)[0x824c027]
/usr/bin/traffic_server(_ZN11HttpCacheSM18do_cache_open_readEv+0x4b)[0x815011b]
/usr/bin/traffic_server(_ZN11HttpCacheSM9open_readEP3URLP7HTTPHdrP21CacheLookupHttpConfigl+0x4[0x8150188]
/usr/bin/traffic_server(_ZN6HttpSM24do_cache_lookup_and_readEv+0x104)[0x8160864]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x746)[0x8177506]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x19a)[0x8176f5a]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM17handle_api_returnEv+0xe2)[0x8177dd2]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x350)[0x8172410]
/usr/bin/traffic_server(_ZN6HttpSM18state_api_callbackEiPv+0x72)[0x8176cd2]
/usr/bin/traffic_server(TSHttpTxnReenable+0x386)[0x80fba76]
/usr/lib/cacheurl.so[0x418e65a0]
/usr/bin/traffic_server(_ZN6HttpSM17state_api_calloutEiPv+0x4bb)[0x817257b]
/usr/bin/traffic_server(_ZN6HttpSM23do_api_callout_internalEv+0x4f)[0x817290f]
/usr/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x1b3)[0x8176f73]
/usr/bin/traffic_server(_ZN6HttpSM32state_read_client_request_headerEiPv+0x239)[0x8164629]
/usr/bin/traffic_server(_ZN6HttpSM12main_handlerEiPv+0x66)[0x81754d6]
/usr/bin/traffic_server[0x8298972]
/usr/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x25[0x8290958]
/usr/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x7d)[0x82b867d]
/usr/bin/traffic_server(_ZN7EThread7executeEv+0x46b)[0x82b8fcb]
/usr/bin/traffic_server[0x82b7da4]
/lib/libpthread.so.0[0x4008747e]
/lib/libc.so.6(clone+0x5e)[0x403d53ce]

论坛徽章:
0
6 [报告]
发表于 2013-03-20 16:53 |只看该作者
回复 5# brianchen829

FATAL: Failed to mmap 987136 bytes, Cannot allocate memory

从这一行来看,是因为从操作系统mmap内存时失败。

有两个原因:
1)在那一刻,你的操作系统的空闲内存,确实不够了。
2)或者真的是因为reclaimable_freelist的潜在bug(但master版本,我们在线上系统跑得很稳定)。

我觉得1)的可能性高一些,导致1)原因有很多,例如,你的cache size是不是配得不够合理(太大了)。

建议你,把ATS挂掉那一刻的操作系统空闲内存,记录下来。

另外,你的操作系统信息等,尽量详尽的收集,反馈给我们。


   

论坛徽章:
0
7 [报告]
发表于 2013-03-20 17:16 |只看该作者
1、操作系统用的是32位,内存16G的。编译的时候开启了pae支持,系统能识别到16G内存。
2、ram_cache试过多个值,1G、2G、3G、8G都试过,但出错的频率并没有减少。
3、内存我看了下已使用情况:最多的时候也就2.8G。在1.5G-2.3G之间波动的。

论坛徽章:
0
8 [报告]
发表于 2013-03-20 17:36 |只看该作者
哈,32位系统,这个得看看

论坛徽章:
0
9 [报告]
发表于 2013-03-24 22:41 |只看该作者
再贴一些ATS重启时的内存信息,老大帮忙看一下。
内存状态。内存大部分被ATS占用。
% free
              total         used         free       shared      buffers
  Mem:      3104496      1924024      1180472            0       412316
Swap:            0            0            0
Total:      3104496      1924024      1180472
% show:cache-stats

Bytes Used --- 269 GB
Cache Size --- 399 GB
--RAM Cache--
Total Bytes -- 1073741824
Bytes Used --- 1072705536
Hits --------- 161734
Misses ------- 128908
--Lookups--
In Progress -- 0
Hits --------- 0
Misses ------- 0
--Reads--
In Progress -- 7
Hits --------- 192226
Misses ------- 405131
--Writes--
In Progress -- 166
Hits --------- 153156
Misses ------- 11331
--Updates--
In Progress -- 5
Hits --------- 57527
Misses ------- 461
--Removes--
In Progress -- 0
Hits --------- 0
Misses ------- 0

错误输出:
[TrafficServer] using root directory '/usr'                                    
/usr/bin/traffic_server - STACK TRACE:                                         
/lib/libtsutil.so.3[0x40031255]                                                
/lib/libtsutil.so.3(reclaimable_freelist_new+0x6e[0x40031e28]                 
/lib/libtsutil.so.3(ink_freelist_new+0x1c)[0x40030fcc]                     
/usr/bin/traffic_server[0x8244e8c]                                             
/usr/bin/traffic_server(_ZN7CacheVC10handleReadEiP5Event+0x1fd)[0x824c41d]      
/usr/bin/traffic_server(_ZN7CacheVC12do_read_callEP7INK_MD5+0x7a)[0x826f66a]   
/usr/bin/traffic_server(_ZN7CacheVC12openReadMainEiP5Event+0xd86)[0x826c0e6]
/usr/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x7d)[0x82b866d]
/usr/bin/traffic_server(_ZN7EThread7executeEv+0x62c)[0x82b917c]            
/usr/bin/traffic_server[0x82b7d94]                                             
/lib/libpthread.so.0[0x4008747e]                                                
/lib/libc.so.6(clone+0x5e)[0x403d53ce]                                      
FATAL: Failed to mmap 1052672 bytes, Cannot allocate memory                 
/usr/bin/traffic_server - STACK TRACE:                                      
/lib/libtsutil.so.3[0x4002e6c4]
/lib/libtsutil.so.3[0x40031279]                                             
/lib/libtsutil.so.3(reclaimable_freelist_new+0x6e[0x40031e28]                 
/lib/libtsutil.so.3(ink_freelist_new+0x1c)[0x40030fcc]                          
/usr/bin/traffic_server[0x8244e8c]                                             
/usr/bin/traffic_server(_ZN7CacheVC10handleReadEiP5Event+0x1fd)[0x824c41d]  
/usr/bin/traffic_server(_ZN7CacheVC12do_read_callEP7INK_MD5+0x7a)[0x826f66a]
/usr/bin/traffic_server(_ZN7CacheVC12openReadMainEiP5Event+0xd86)[0x826c0e6]
/usr/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x7d)[0x82b866d]   
/usr/bin/traffic_server(_ZN7EThread7executeEv+0x62c)[0x82b917c]                 
/usr/bin/traffic_server[0x82b7d94]                                          
/lib/libpthread.so.0[0x4008747e]                                            
/lib/libc.so.6(clone+0x5e)[0x403d53ce]                                      
[TrafficServer] using root directory '/usr'

内存回收的配置
CONFIG proxy.config.allocator.enable_reclaim INT 1
CONFIG proxy.config.allocator.reclaim_factor FLOAT 0.300000
CONFIG proxy.config.allocator.max_overage INT 3   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP