• OpenSIPS OutOfMemory 崩溃处理


    1. 问题背景

    项目开发结束,为了评估系统容量和性能,在上线前使用 SIPp 模拟客户端对 OpenSIPS 进行了压测。压测时发现当会话数量超过 1000 时,OpenSIPS 必现崩溃宕机,不满足交付标准

    2. 排查

    查看 OpenSIPS 日志文件,发现如下 ERROR 日志,显而易见是共享内存用尽的问题。实际上在 OpenSIPS 中内存主要分为以下两部分:

    1. SHM_MEM
      共享内存,整个程序共同使用的一块内存区域,相当于 JVM 中的堆内存
    2. PKG_MEM
      子进程独享内存,相当于 JVM 中的栈内存

    查看 OpenSIPS 官方 OOM 文档,可以看到 OpenSIPS 报出这个异常主要有两个原因,一个是共享内存配置太小,另一个是发生了内存泄漏。OpenSIPS 是开源项目,而笔者项目中使用的又是稳定的发行版本,发生内存泄漏的可能性很小。查阅 OpenSIPS 源码,发现在未配置共享内存参数的情况下,默认分配的共享内存大小只有 32M,因此初步判断 OOM 的原因是共享内存配置太小不满足程序需求

    WARNING:core:fm_malloc: not enough contiguous free shm memory (320 bytes left, need 360), attempting defragmentation... please increase the "-m" command line parameter!
    ERROR:core:fm_malloc: not enough free shm memory (96 bytes left, need 360), please increase the "-m" command line parameter!
    
    • 1
    • 2

    3. 解决方案

    推断 OOM 的原因是共享内存太小不够用,那么只要增大共享内存后再次压测即可快速验证。OpenSIPS 文档中已经给出了配置共享内存的方法,使用如下启动命令通过 -m 参数指定共享内存大小为 256M 后重启,会话数量超过 1000 时 OpenSIPS 崩溃宕机的问题不再复现

    opensips -f opensips.cfg -m 256
    
    • 1
  • 相关阅读:
    RHCSA认证考试---11.查找文件
    Soundness
    【每日一练】中等难度
    Java字符串常量池
    day53--动态规划12
    CF比赛1610D. Not Quite Lee(Codeforces Global Round 17)(数学)(计数)
    【Linux操作系统】 虚拟文件系统 | 文件缓存
    线性表——链表(c语言)
    windows下安装zookeeper及kafka
    行驶证识别易语言代码
  • 原文地址:https://blog.csdn.net/weixin_45505313/article/details/132859979