操作系统 :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. Java如何生成随机数?要不要了解一下!

    前言 我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣.本文就来介绍 Java 随机数. 一.Random类介绍 在 Java 中使用 Random 工具类来 ...

  2. python selenium自动化火狐浏览器开代理IP服务器

    前言 Selenium是一款用于自动化测试Web应用程序的工具,它可以模拟用户在浏览器中的各种行为.而代理IP服务器则是一种可以帮助用户隐藏自己真实IP地址的服务器,使得用户可以在互联网上更加匿名地进 ...

  3. 可能是最简单最通透的Comparable和Comparator接口返回值理解

    先说 Comparator 接口,这个理解了,下一个就理解了 一.Comparator 的用法(暂不考虑0,因为0不处理) 返回-1,1交换不交换位置,如果撇开比较器的两个参数和jdk默认顺序来说,存 ...

  4. CoaXpress downlink数据解析方法

    什么是downlink数据 downlink指的是相机传输到host采集卡的高速链路,其中包含了如下类型的数据: 1.Stream Data 2.Trigger Ack, Trigger: 3.Ack ...

  5. Open AI ChatGPT Prompt 学习之基础篇

    碎碎念 2023 年,最火的可能就是 openAI 了,其组织代表的产品 chatGTP,相信大家已经有所耳闻.不少同学已经开始着手使用,并截图晒出 ChatGPT 是多么得智能与神奇.而有的同学在使 ...

  6. https 原理分析进阶-模拟https通信过程

    大家好,我是蓝胖子,之前出过一篇https的原理分析 ,完整的介绍了https概念以及通信过程,今天我们就来比较完整的模拟实现https通信的过程,通过这篇文章,你能了解到https核心的概念以及原理 ...

  7. .NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)

    〇.前言 当把开发好的 WebApi 接口,部署到 Windows 服务器 IIS 后,postman 可以直接访问到接口并正确返回,这并不意味着任务完成,毕竟接口嘛是要有交互的,最常见的问题莫过于跨 ...

  8. Python 学习路线图

    Python 学习路线图 在这个系列笔记中,我将陆续整理自己在学习 Python 编程语言及其框架的过程中留下的笔记和代码,目的是掌握如何在生产环境中利用各种领域的第三方框架来快速开发应用程序.和大多 ...

  9. JDBC的增删改-结果集的元数据-Class反射-JDBC查询封装

    一.使用JDBC批量添加 ​ 知识点复习: ​1.JDBC的六大步骤 (导入jar包, 加载驱动类,获取连接对象, 获取sql执行器.执行sql与并返回结果, 关闭数据库连接) 2.​封装了一个DBU ...

  10. 分别在Windows系统和Linux系统环境安装anaconda3和tensorflow

    Windows系统环境 一.安装anaconda 这里安装的是Anaconda3-2019.03-Windows-x86_64.exe(python3.7版本) 二.检查安装环境 1.若anacond ...