• 服务端负载监控-参考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
    ");
    }
  • 相关阅读:
    Linux: 安装和启用firefox浏览器的java
    Latex: beamer
    时频分析:窗口傅立叶变换
    Python: 面向对象
    Linux: 安装NVIDIA显卡驱动
    Matlab: 路径的操作
    python--文件读写
    python--函数
    python--数据类型
    网络基础——网络协议
  • 原文地址:https://www.cnblogs.com/wangkeqin/p/12795042.html
Copyright © 2020-2023  润新知