From 15d4993cc39e54f6d704bf4f7b0b5c68a449516c Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 1 Aug 2014 22:43:12 +0800 Subject: [PATCH] slowdown the cpu usage for srs to calc connections when too many connections. 0.9.180 --- trunk/3rdparty/gprof/readme.txt | 2 +- trunk/src/app/srs_app_server.cpp | 2 +- trunk/src/app/srs_app_utility.cpp | 10 +++++++++- trunk/src/core/srs_core.hpp | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/trunk/3rdparty/gprof/readme.txt b/trunk/3rdparty/gprof/readme.txt index 49d8b963c..3e104a9a1 100644 --- a/trunk/3rdparty/gprof/readme.txt +++ b/trunk/3rdparty/gprof/readme.txt @@ -14,7 +14,7 @@ gprof2dot.py: 0. 若需要图形化,编译dot: cd 3rdparty/gprof && bash build_gprof2dot.sh 1. srs配置时: - ./configure --with-pg + ./configure --with-gprof 脚本会加入编译参数"-pg -lc_p",gcc -g -pg -lc_p -c xxx -o xxx.o,即在configure中打开 Performance="-pg -lc_p" 链接时,加入链接选项"-pg",否则无法工作:gcc -pg -o srs xxxx.o,即在configure中打开 PerformanceLink="-pg" 2. 编译和启动程序:make && ./objs/srs -c conf/srs.conf diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index 43841265a..3489a2363 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -90,7 +90,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // update network devices info interval: // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES -#define SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES 90 +#define SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES 120 SrsListener::SrsListener(SrsServer* server, SrsListenerType type) { diff --git a/trunk/src/app/srs_app_utility.cpp b/trunk/src/app/srs_app_utility.cpp index 1b4363b2a..3e1e5a673 100644 --- a/trunk/src/app/srs_app_utility.cpp +++ b/trunk/src/app/srs_app_utility.cpp @@ -833,10 +833,18 @@ void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps) int nb_conn_sys_other = 0; // @see: http://tester-higkoo.googlecode.com/svn-history/r14/trunk/Tools/iostat/iostat.c - while (fgets(buf, sizeof(buf), f)) { + for (int i = 0; fgets(buf, sizeof(buf), f); i++) { int st = 0; int ret = sscanf(buf, "%*s %*s %*s %2x\n", &st); + // there are maybe many many connections, + // for example, when srs used for monitor other process, + // like nginx, there are maybe many TIME_WAIT conections. + // we sleep 1ms when read 1000 records, so 100ms for 10w connections. + if ((i % 1000) == 0) { + st_usleep(1000); + } + if (ret == 1) { if (st == SYS_TCP_ESTABLISHED) { nb_conn_sys_established++; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 195d9be69..7a638b27b 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "0" #define VERSION_MINOR "9" -#define VERSION_REVISION "179" +#define VERSION_REVISION "180" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS"