操作系统 :CentOS 7.6_x64、debian 11 (bullseye,docker)

FreeSWITCH版本 :1.10.9

Docker版本:23.0.6

FreeSWITCH容器化带来部署便利的同时,也会遇到一些问题,比如今天要讨论的RTP端口占用问题(FreeSWITCH申请宿主机已占用的端口)。

我将从以下三个方面进行展开:

1)从源码层面分析FreeSWITCH的端口分配及检查逻辑;

2)描述开启RTP端口占用检测的方法;

3)演示RTP端口占用检测效果;

FreeSWITCH容器化参考我之前的文章:

https://www.cnblogs.com/MikeZhang/p/dockerPackFs20230617.html

https://www.cnblogs.com/MikeZhang/p/dockerFS20230716.html

一、端口分配及检查逻辑

 文件:switch_core_port_allocator.c

1、  端口查找的主循环

如果系统认为还有端口可分配,则一直重试,没有退出循环的逻辑,存在导致fs宕机的风险。

2、端口检查逻辑  

端口检查通过bind函数实现,尝试bind,成功后,关闭socket,释放端口。

存在以下两个问题:

1)  效率不高;

2)  bind后会执行释放操作,rtp使用时仍然会存在失败的风险;

二、启RTP端口占用检测的方法

FreeSWITCH默认不开启rtp端口检测占用,端口分配了就直接使用。可通过如下配置开启rtp端口检查。

文件 :autoload_configs/switch.conf.xml

内容:

<param name="rtp-port-usage-robustness" value="true"/>

三、RTP端口占用检测效果演示

1、调整端口范围

文件:autoload_configs/switch.conf.xml

内容:

<param name="rtp-start-port" value="$${force_rtp_start_port}"/>
<param name="rtp-end-port" value="$${force_rtp_end_port}"/>

2、容器外占用端口

安装netcat:

yum install netcat

占用端口:

nc -l -u 20002

3、呼叫测试

3.1、开启后可实现端口占用检查,如果占用了则重新分配

测试效果如下:

3.2、如果rtp端口范围比较小,会出现一直尝试分配端口的情况,可能会导致fs宕机

测试效果如下:

 

好,就这么多了,希望对你有帮助。

FreeSWITCH容器化问题之rtp端口占用的更多相关文章

  1. .NET Core容器化之多容器应用部署@Docker-Compose

    1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题. 2. Why Need Ngin ...

  2. Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api

    Atitit s2018.6 s6  doc list on com pc.docx Atitit s2018.6 s6  doc list on com pc.docx  Aitit algo fi ...

  3. .NET Core容器化之多容器应用部署-使用Docker-Compose

    原文补充: -- docker-compose.ymlversion: ' services: mvc-web: container_name: mvc.web.compose build: . re ...

  4. Coding-Job:从研发到生产的容器化融合实践

    大家好,我是来自 CODING 的全栈开发工程师,我有幸在 CODING 参与了 Coding-Job 这个容器化的编排平台的研发.大家对 CODING 可能比较了解, Coding.net 是一个一 ...

  5. 一看就懂-Docker容器化

    一.Docker简介 1.1 什么是docker docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件. ...

  6. 一次容器化springboot程序OOM问题探险

    背景 运维人员反馈一个容器化的java程序每跑一段时间就会出现OOM问题,重启后,间隔大概两天后复现. 问题调查 一查日志 由于是容器化部署的程序,登上主机后使用docker logs Contain ...

  7. aspnetcore 容器化部属到阿里云全过程记录

    第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...

  8. Docker容器化技术(上)

    目录 Docker容器化技术 一.介绍 二.Docker的发展 三.Docker安装 四.阿里云Docker镜像加速 五.Docker的基本概念 六.命令 七.Docker宿主机与容器通信 八.容器内 ...

  9. 翻译-在10行代码之内创建容器化的.net core应用

    本文翻译自Hans Kilian的文章 Creating a containerized .NET core application in less than 10 lines of code htt ...

  10. 研发环境容器化实施过程(docker + docker-compose + jenkins)

    目录 背景介绍 改造思路 容器构建 基础准备 中间件容器 外部依赖容器 业务应用容器 容器整合 自动构建容器 Maven相关 非Maven项目 总结 背景介绍 目前公司内部系统(代号GMS)研发团队, ...

随机推荐

  1. 自然语言处理(NLP)

    "自然语言处理(Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和 ...

  2. Kafka关键原理

    日志分段切分条件 日志分段文件切分包含以下4个条件,满足其一即可: 当前日志分段文件的大小超过了broker端参数 log.segment.bytes 配置的值.log.segment.bytes参数 ...

  3. Vue——vuex使用、Router使用、localstorage、sessionstorage和cookie

    vuex使用 # vuex :状态管理器--->存数据(变量)的地方,所有组件都可以操作 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理( ...

  4. 沉思篇-剖析Jetpack的LiveData

    上一篇我们讲到了架构组件中的Lifecycle,由于缺少具体的运用,可能缺少直观的感受,今天我们就用Lifecycle实战一回,看看Lifecycle是怎样运用到LiveData中的. LiveDat ...

  5. Java打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    代码如下: public static void main(String[] args) { int a,b,c; for(int num = 100;num <= 999;num++) { a ...

  6. Linux 图形栈从入门到放弃 --- Linux 图形相关概念简介

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   无 前言   在日常生活中,像我们常用的ubunt ...

  7. Dubbo 我手写几行代码,就把通信模式给你解释清楚!

    作者:小傅哥 博客:https://bugstack.cn 原文:https://bugstack.cn/md/road-map/road-map.html 沉淀.分享.成长,让自己和他人都能有所收获 ...

  8. 【Docker】部署Redis

    1.下载镜像 #下载最新版Redis镜像 (其实此命令就等同于 : docker pull redis:latest ) docker pull redis # 下载指定版本的Redis镜像 (xxx ...

  9. 图像处理_Retinex图像增强

    单尺度SSR (Single Scale Retinex) 图像 S ( x , y ) S(x,y) S(x,y)分解为两个不同的图像:反射图像 R ( x , y ) R(x,y) R(x,y), ...

  10. EchoMode的显示效果

    1 import sys 2 from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout 3 4 class l ...