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
    ");
    }
  • 相关阅读:
    Diverse Garland
    Basketball Exercise
    Quasi Binary
    Vacations
    Given Length and Sum of Digits...
    三大集合框架之map
    三大集合框架之Set
    JDBC操作数据库的基本步骤:
    java面试之----堆(heap)、栈(stack)和方法区(method)
    JSP九大隐式对象
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/12795042.html
Copyright © 2011-2022 走看看