服务端负载监控-参考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:\n"); 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\n", obj->category.c_str(), (int64_t)obj->ptr, obj->size); total += obj->size; } printf("%d objects leak %dKB.\n", (int)_srs_ptrs.size(), total / 1024); printf("@remark use script to cleanup for memory watch: ./etc/init.d/srs stop\n"); }
————雁过留痕,风过留声,人的记忆是一种很不靠谱的东西。记下这些笔记,希望自己能够在需要的时候有所回忆,也希望能够帮助哪些需要获取这些知识的人。