zoukankan      html  css  js  c++  java
  • 服务端负载监控-参考srs服务器源码

    #include <map>
    #include <stdio.h>
    using namespace std;
    
    struct SrsMemoryObject
    {
        void* ptr;
        std::string category;
        int size;
    };
    
    std::map<void*, SrsMemoryObject*> _srs_ptrs;
    
    void srs_memory_watch(void* ptr, string category, int size)
    {
        SrsMemoryObject* obj = NULL;
        
        std::map<void*, SrsMemoryObject*>::iterator it;
        if ((it = _srs_ptrs.find(ptr)) != _srs_ptrs.end()) {
            obj = it->second;
        } else {
            obj = new SrsMemoryObject();
            _srs_ptrs[ptr] = obj;
        }
        
        obj->ptr = ptr;
        obj->category = category;
        obj->size = size;
    }
    
    void srs_memory_unwatch(void* ptr)
    {
        std::map<void*, SrsMemoryObject*>::iterator it;
        if ((it = _srs_ptrs.find(ptr)) != _srs_ptrs.end()) {
            SrsMemoryObject* obj = it->second;
            srs_freep(obj);
            
            _srs_ptrs.erase(it);
        }
    }
    
    void srs_memory_report()
    {
        printf("srs memory watch leak report:
    ");
        
        int total = 0;
        std::map<void*, SrsMemoryObject*>::iterator it;
        for (it = _srs_ptrs.begin(); it != _srs_ptrs.end(); ++it) {
            SrsMemoryObject* obj = it->second;
            printf("    %s: %#"PRIx64", %dB
    ", obj->category.c_str(), (int64_t)obj->ptr, obj->size);
            total += obj->size;
        }
        
        printf("%d objects leak %dKB.
    ", (int)_srs_ptrs.size(), total / 1024);
        printf("@remark use script to cleanup for memory watch: ./etc/init.d/srs stop
    ");
    }
  • 相关阅读:
    smdkv210
    wireshark常用过滤规则
    go json序列化不填充默认值
    refactoring.guru-重构-如何重构
    refactoring.guru--重构--何时重构
    refactoring.guru--重构--技术债务
    refactoring.guru学习记录--重构--整洁的代码
    window7下python3 编译pjsua
    go 单元测试框架介绍
    算法图解学习笔记之算法
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/12795042.html
Copyright © 2011-2022 走看看