proxy_mem_limited设置过低会怎么样

【 使用环境 】生产环境 or 测试环境

【 OB or 其他组件 】obproxy

【 使用版本 】v4.3.1;v4.3.6

【问题描述】

proxy_mem_limited 配置值设置过小,会引发哪些问题?

  • 会不会频繁内存换入换出,导致性能下降

  • 会不会触发 OOM

  • 会不会出现 SQL 执行中断

7 个赞

proxy_mem_limited设置过低会导致 OBProxy 频繁触发内存告警、主动退出(OOM Kill),进而引发连接中断、服务不可用甚至雪崩式故障。‌‌

3 个赞

学习一下

有官网明确的说明没

关于proxy的问题,mem确实是一个重要的考虑因素。在实际应用中,我发现or方法通常更有效。

从业务视角去看,ODP 的问题主要包含以下几类:

  • 登录失败:绝大部分都是某个地方配置出现问题,比较容易复现和排查
  • SQL 执行
    • 返回错误:后端服务返回明确的错误码,根据错误码去 OBServer 节点和 ODP 端排查
    • 慢 SQL:需要确定每个模块的耗时,找到瓶颈点去优化
    • 断连接:和慢 SQL 类似,需要先排查哪个模块主动断开连接(主动发送 FIN 报文),然后排查具体模块
      • 超时断连
      • 异常断连
2 个赞

主要影响连接和登录吧,总之这个参数的内存也不应该太小

oom,内存告警

@论坛小助手

根据文档库中的信息,如果 proxy_mem_limited 设置过低,可能会引发以下问题:

  1. 频繁内存换入换出

    • 由于 OBProxy 的可用内存被限制在较低的值,当实际内存使用接近或达到该限制时,系统可能会开始将一些内存页换出到磁盘上。这会导致频繁的内存换入换出操作(即页面交换),从而严重影响性能。具体来说,这种频繁的换入换出会增加 I/O 操作,降低响应速度。
  2. 触发 OOM (Out of Memory)

    • 如果 proxy_mem_limited 设置得过低,OBProxy 可能会因为内存不足而频繁退出。文档片段 1 中提到,OBProxy 日志中会出现类似 obproxy's memory is out of limit's 90% 的报错信息,并且超过设置的内存限制后进程将会主动退出。
    • 默认情况下,proxy_mem_limited 参数的默认值为 800 MB(对于命令行安装的 OBProxy),如果设置得比这个值还小,那么 OBProxy 进程可能会频繁地因内存不足而崩溃并重启。
  3. SQL 执行中断

    • 从文档提供的信息来看,并没有明确指出 proxy_mem_limited 设置过低会直接导致 SQL 执行中断。但是,可以推测,如果内存限制过低,OBProxy 在处理大查询或高并发请求时可能会因为内存不足而无法正常运行,进而影响到正在执行的 SQL 语句,甚至可能导致部分 SQL 语句执行失败或中断。

综上所述,proxy_mem_limited 设置过低确实会导致频繁内存换入换出和触发 OOM,但关于是否会直接导致 SQL 执行中断,虽然文档中未明确说明,但可以合理推测这种情况是有可能发生的。因此,在生产环境中建议适当调整 proxy_mem_limited 以避免上述问题。

详情请参考:

  1. ODP 端故障
  2. proxy_mem_limited
  3. 性能分析
  4. ODP 性能分析
  5. 内存诊断
  6. memory_limit
  7. 网络传输相关参数
  8. 产品 FAQ
  9. sql_table_cache_mem_limited

学学吧

批量数据变更很容易OOM

尤其是OOM 有官方文档出处没,这个很重要。

如果因为 proxy_mem_limited 满了就OOM了,那风险太大了。可以慢,这个能理解,但直接OOM就有点坑。

打卡打卡