概述

freeswitch是一款简单好用的VOIP开源软交换平台。

在fs的使用过程中,会遇到各种各样的问题,各种问题中,性能问题是最头疼的。

最近在测试某些场景的时候,压测会造成fs的内存占用持续升高,并在达到某个临界点的时候击溃fs的端口服务,导致全部sip呼叫响应503。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

起因

在问题发生后,通过对fs的模块、配置等进行排查,确定了几个方向。

方向1,日志写缓存。

方向2,呼叫session处理线程池。

方向3,端口启动数目。

经过测试和复现,方向锁定3端口启动数目。

测试方案

首先,在fs的conf/sip_profiles目录下生成1200个external****.xml文件,每个文件使用不同的端口号。

external9200.xml

<profile name="external9200">

…

<param name="sip-port" value="9200"/>

…

启动fs,使用sipp进行压测(脚本参见之前的文章)。

测试结果

启动fs后,没有呼叫的时候,已经占用了3.6G(46%)的内存。

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

20596 root      -2 -10   17.1g   3.6g   8252 S  97.3 46.5   1:26.05 freeswitch

使用sipp-auto.py脚本进行并发测试。

测试呼叫跑满1小时。

20596 root      -2 -10   18.5g   5.2g   3308 S 121.6 68.6  15:11.83 freeswitch

测试呼叫经过3个小时。

20596 root      -2 -10   21.3g   5.4g   3168 S 231.5 70.4 772:38.37 freeswitch

从top的显示中可以看到fs的内存占用持续升高。

总结

fs启动打开的端口超过一定数目(1000)之后,会有内存占用过大和内存持续升高的问题。

在删除多余的端口资源后,测试恢复正常。

具体原因需要对sofia模块代码走读确定。

空空如常

求真得真

freeswitch的一个性能问题的更多相关文章

  1. 一个性能较好的JVM参数配置

    一个性能较好的web服务器jvm参数配置: -server//服务器模式-Xmx2g //JVM最大允许分配的堆内存,按需分配-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次 ...

  2. 一个性能较好的JVM参数配置(转)

    一个性能较好的web服务器jvm参数配置: -server//服务器模式-Xmx2g //JVM最大允许分配的堆内存,按需分配-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次 ...

  3. 一个性能较好的jvm參数配置以及jvm的简单介绍

    一个性能较好的webserverjvm參数配置: -server //服务器模式 -Xmx2g //JVM最大同意分配的堆内存,按需分配 -Xms2g //JVM初始分配的堆内存.一般和Xmx配置成一 ...

  4. 解决 EF 分层查询的一个性能问题[转]

    前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...

  5. (转)使用string.Format需要注意的一个性能问题

    今天,我在写C#代码时,突然发现一个最熟悉的陌生人 —— string.Format.在写C#代码的日子里,与它朝夕相伴,却没有真正去了解它.只知道在字符串比较多时,用它比用加号进行字符串连接效率更高 ...

  6. 90 % Java 程序员被误导的一个性能优化策略

    我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策 ...

  7. 解决 EF where<T>(func) 查询的一个性能问题

    前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...

  8. 使用spring jdbc遇到的一个性能问题

    使用JdbcTemplate的queryForList方法,返回特别慢,40多万结果集耗时超过6分钟.双核CPU,占用率始终在50%,内存逐渐增长至2G左右. 进行debug跟进去看,看到jdbcTe ...

  9. 用一个性能提升了666倍的小案例说明在TiDB中正确使用索引的重要性

    背景 最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行. 这个规模不算大,测试数据以及库表结构是用Dump ...

  10. 比较C++和C#的一个性能问题

    C++:只要你的代码正确,算法良好,你比较少关注性能问题,编译器会替你搞定绝大部分工作 C#:你的代码正确,算法良好,你还得用工具去分析优化性能,JIT为了快速工作,很多优化工作没有深入开展. 手工优 ...

随机推荐

  1. VSCode中的快捷键

    VS Code中的快捷键 文件和编辑操作 Ctrl+S:保存文件 Ctrl+K S:保存全部文件 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+X:剪切 Ctrl+F:查找 Ctrl+H:替换 C ...

  2. SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值

    SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高 查看内存状态: DBCC Me ...

  3. 三维模型OSGB格式轻量化的纹理压缩和质量保持分析

    三维模型OSGB格式轻量化的纹理压缩和质量保持分析 在三维模型应用中,纹理数据是一个重要的部分,可以为模型增加更多的真实感和细节.但是,由于纹理数据通常会占用大量的存储空间和传输带宽,因此,在OSGB ...

  4. Go 如何正确关闭通道

    序言 Go 在通道这一块,没有内置函数判断通道是否已经关闭,也没有可以直接获取当前通道数量的方法.所以对于通道,Go 显示的不是那么优雅.另外,如果对通道进行了错误的使用,将会直接引发系统 panic ...

  5. 重要变更 | Hugging Face Hub 的 Git 操作不再支持使用密码验证

    在 Hugging Face,我们一直致力于提升服务安全性,因此,我们将对通过 Git 与 Hugging Face Hub 交互时的认证方式进行更改.从 2023 年 10 月 1 日 开始,我们将 ...

  6. 初级线段树 POJ3264

    Balanced Lineup Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line ...

  7. 拯救Win7,2023该如何正确升级?

    对于现存的Win7系统用户,微软曾多次提醒将在2023年1月停止对Win7与Win8.1的安全更新和技术支持.而转眼已经来到2023,时间已到,对于Win7,微软已经再也不管了,停止为Win7用户提供 ...

  8. Solution -「NOI 2020」时代的眼泪

    Description Link. 给出一个二维平面以及一些点,保证点不在同行 / 同列.每次询问求出一个子矩阵里面的顺序对. Solution 卡常,卡你吗. 膜拜 dX. 基本是把 dX 的题解贺 ...

  9. js合并对象常用方法

    const person = { name: 'David Walsh', gender: 'Male' }; const tools = { computer: 'Mac', editor: 'At ...

  10. Python socket实现简单聊天,同步输入和接收消息

    查的资料很多都是必须等待接收数据后才能再次输入.做了修改,使用多线程的形式,实现一边输入,一边接收 服务端代码 import socket import threading import sys im ...