winlin

slowdown the cpu usage for srs to calc connections when too many connections. 0.9.180

... ... @@ -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
... ...
... ... @@ -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)
{
... ...
... ... @@ -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++;
... ...
... ... @@ -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"
... ...