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模块中的内存使用.如果你想修改这个行为,可以阅读