MemoryHook 内存统计

本文介绍了Skynet如何利用MemoryHook进行内存统计,特别是针对服务占用内存的监测。MemoryHook通过为每个工作线程分配TLS区,在处理服务消息前记录服务地址,以此追踪内存分配来源。虽然引入了一定的开销,但主要适用于C扩展库的内存泄露分析。默认情况下,lua服务的内存使用不被hook,仅统计C模块内存。用户可以通过lua服务`cmemory`获取统计信息,或者参考源码进行自定义配置。
摘要由CSDN通过智能技术生成

skynet默认使用了jemalloc作为内存管理模块,但这并非必须,jemalloc能带来多大好处也和实际应用有关.是否连接jemalloc参考Build


skynet实现了一个和jemalloc物管的memory hook,用来做服务占用内存的统计,可以用来在C层面分析是否有内存泄露.


它的原理是为每个工作线程分配一个TLS区,在worker处理服务的消息前,先设置当前服务的地址,这样在内存分配发送时就要可以知道是由哪个服务分配的内存,这又易点点开销(每块内存多了几个字节,且有一些额外的运行开销),如果你计较它,可以关闭.


通常我们不太需要这个统计,因为大部分服务是用lua编写的,可以通过DebugConsole向lua服务索要内存使用情况.它主要用于自己编写的lua C扩展库的统计.统计接口被封装为一个叫做memory的库供lua调用.或者你可以直接启动cmemory这个lua服务来输出统计信息.


注: 在1.0 beta之后,对于lua服务使用的默认分配器不再hook统计内存开销,它只统计C模块中的内存使用.如果你想修改这个行为,可以阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值