• 服务端负载监控-参考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
    ");
    }
  • 相关阅读:
    我们的回忆

    出差
    恍惚
    七夕
    K8S命令(一)——Node相关
    K8S命令(二)——查询相关
    [转载]为什么你应该(从现在开始就)写博客
    替代JDK日期的开源项目:jodatime
    使用getElementById获取xml中的指定元素
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/12795042.html
Copyright © 2020-2023  润新知