- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 5.6k
v1_EN_GPERF
The valgrind is a very good memory and cpu profile tool, but the st(state-threads) used by SRS does not support valgrind.
The gperf is a project of google, to analysis memory and cpu, base on tcmalloc. SRS can use gperf.
The use scenarios:
- gmc: gperf memory check, read https://gperftools.github.io/gperftools/heap_checker.html
- gmp: gperf memory profile, read https://gperftools.github.io/gperftools/heapprofile.html
- gcp: gperf cpu profile, read https://gperftools.github.io/gperftools/cpuprofile.html
To use gmc for SRS:
- When configure gmc: ./configure --with-gperf --with-gmc
- Compile srs: make
- Set env when start SRS: env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./objs/srs -c conf/srs.conf
- Stop SRS, get the gmc report: press CTRL+Cor send SIGINT to SRS.
Note: When make SRS success, it will show these commands.
It work when SRS print the following message:
[winlin@dev6 srs]$ env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./objs/srs -c conf/srs.conf
WARNING: Perftools heap leak checker is active -- Performance may sufferThe gmc report:
Leak check _main_ detected leaks of 184 bytes in 4 objects
The 4 largest leaks:
Using local file ./objs/srs.
Leak of 56 bytes in 1 objects allocated from:
	@ 46fae8 _st_stack_new
	@ 46f6b1 st_thread_create
	@ 46ea65 st_init
	@ 433f41 SrsServer::initialize
	@ 46e4ca main
	@ 3855a1ec5d __libc_start_mainOther examples, see research/gperftools/heap-checker
To use gmp for SRS:
- Configure SRS: ./configure --with-gperf --with-gmp
- Build SRS: make
- Start SRS for memory profile: rm -f gperf.srs.gmp*; ./objs/srs -c conf/srs.conf
- Stop SRS to generate gmp file, press CTRL+Cor send SIGINT to SRS.
- Analysis gmp file: ./objs/pprof --text objs/srs gperf.srs.gmp*
Note: When make SRS success, it will show these commands.
It works when SRS show the messages:
[winlin@dev6 srs]$ ./objs/srs -c conf/srs.conf
Starting tracking the heapThe gmc result:
[winlin@dev6 srs]$ ./objs/pprof --text objs/srs gperf.srs.gmp*
Using local file objs/srs.
Using local file gperf.srs.gmp.0001.heap.
Total: 0.1 MB
     0.0  31.5%  31.5%      0.0  49.1% SrsConfDirective::parse_conf
     0.0  28.4%  59.9%      0.0  28.4% std::basic_string::_Rep::_S_create
     0.0  27.4%  87.3%      0.0  27.4% _st_epoll_init
     0.0  11.7%  99.0%      0.0  11.7% __gnu_cxx::new_allocator::allocate
     0.0   0.4%  99.5%      0.0  27.9% st_initOther examples, read research/gperftools/heap-profiler
To use gmp for SRS:
- Configure with gcp: ./configure --with-gperf --with-gcp
- Build SRS: make
- Start SRS with gcp: rm -f gperf.srs.gcp*; ./objs/srs -c conf/srs.conf
- Stop SRS to generate the gcp file, press CTRL+Cor send SIGINT to SRS.
- Analysis gcp file: ./objs/pprof --text objs/srs gperf.srs.gcp*
Note: When make SRS success, it will show these commands.
The gcp result:
[winlin@dev6 srs]$ ./objs/pprof --text objs/srs gperf.srs.gcp*
Using local file objs/srs.
Using local file gperf.srs.gcp.
Removing _L_unlock_16 from all stack traces.
Total: 20 samples
       8  40.0%  40.0%        8  40.0% 0x00007fff0ea35917
       4  20.0%  60.0%        4  20.0% __epoll_wait_nocancel
       2  10.0%  70.0%        2  10.0% __read_nocancel
       1   5.0%  95.0%        1   5.0% memset
       1   5.0% 100.0%        1   5.0% tc_delete
       0   0.0% 100.0%        5  25.0% 0x00007f9fad927c4f
       0   0.0% 100.0%        2  10.0% SrsBuffer::ensure_buffer_bytes
       0   0.0% 100.0%        5  25.0% SrsClient::do_cycle
       0   0.0% 100.0%        5  25.0% SrsClient::fmle_publish
       0   0.0% 100.0%        1   5.0% SrsClient::process_publish_messageOther examples, read research/gperftools/cpu-profiler
The conflicts:
- gmc+gmp: Conflicts.
- gmc+gcp: OK.
- gmp+gcp: OK.
Note: The configure of SRS will check the conflicts.
Winlin 2014.11
Welcome to SRS wiki!
Please select your language:
Please select your language:
Please select your language:
Please select your language:
Please select your language:
