You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puma Web服务器是否具备请求超时机制?如何配置终止慢请求?

在Puma中配置请求超时以终止耗时过长的进程

当然可以,针对你遇到的工作线程占用大量资源、请求耗时过久的问题,有两种常用的临时解决方案:

1. 使用Puma内置的worker_timeout配置(重启无响应工作进程)

这个配置针对整个工作进程,如果某个工作进程在指定时间内没有响应主进程的心跳检测,Puma会自动重启该进程,快速释放被占用的CPU和内存。

在你的puma.rb配置文件中添加:

worker_timeout 30 # 单位为秒,可根据实际情况调整

适用场景:工作进程完全挂住、无法处理新请求的情况,能快速恢复进程可用性。

2. 使用rack-timeout gem(终止单个耗时请求)

如果需要精准终止单个超时请求而非重启整个进程,推荐使用rack-timeout gem,它可以监控单个请求的执行时间,超时后直接终止该请求的线程。

配置步骤:

  1. 在Gemfile中添加依赖:
gem 'rack-timeout'
  1. 执行安装命令:
bundle install
  1. 在应用中启用配置:
    • 如果你用Rails,在config/application.rb中添加:
      require 'rack/timeout'
      Rack::Timeout.timeout = 15 # 单个请求超时时间,单位秒
      
    • 或者在config.ru中配置:
      require_relative 'config/environment'
      require 'rack/timeout'
      use Rack::Timeout
      run Rails.application
      

配置后,当请求超时会抛出Rack::Timeout::RequestTimeoutException,你可以在应用中捕获这个异常,返回友好的错误提示给用户。

关键提醒

  • 超时时间需合理设置,避免误杀正常的长耗时请求,建议先从20-30秒开始测试,再逐步调整。
  • 以上只是临时应急方案,务必尽快排查应用逻辑问题:比如数据库慢查询、代码死循环、外部服务调用未设置超时等,从根源解决资源占用问题。

内容的提问来源于stack exchange,提问作者Firhanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:55:08