- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我了解 Puma 相对于其他 Rails Web 服务器的优势在于它处理慢速客户端的方式。当 Puma 服务器接收并下载一个(可能很慢的)请求时,它仍然可以接收和下载其他可能下载速度更快的请求,并在慢速请求完成接收之前传递给 worker 进行处理。
但我找不到任何关于此限制的信息(如果有的话)。
Puma 可以同时下载任意数量的请求吗?如果同时有 1000 个慢速请求命中它,假设它不是慢速请求,第 1001 个请求会首先到达 Puma worker 吗?
我想我通常感兴趣的是多个慢速请求对其他请求(包括彼此)的影响 - 因为我正在开发一个可能涉及大量“慢速请求”(从手机上传图片)的应用程序通过 3G)。
This great article @nate-berkopec 在原则上帮助解释了 Puma 如何帮助慢速客户端:“在集群模式下,Puma 可以处理慢速请求(多亏了一个单独的主进程,它负责下载请求并传递它们)。” 。”任何人都可以提供更多的信息,我们将非常欢迎。
最佳答案
有很多考虑因素,例如 IO 轮询系统、内存和并发问题。
编辑(2020 年 9 月 9 日):此时 Puma 服务器正在 nio4r
上运行,不应再受到 的限制select
系统调用(其中文件描述符值限制为 1023)。
据我所知,Puma 使用 select
系统调用(与 iodine 或 passenger 不同,iodine 或 passenger 也可以保护您免受慢速客户端的影响,但使用 kqueue
或 epoll
)。
select
系统调用在大多数系统上都有限制(通常最多 1024 个客户端/maxfd
)。我认为这会产生一个限制。
但是,我知道 Puma 正在努力用既便携又有效的东西(例如利用 nio4r
gem)替换 select
系统调用。
我不知道这是否已经实现,但它会打破这个限制并可能提高性能。
慢速客户端仍然消耗内存,因为它们用 header 数据慢慢填充缓冲区或缓慢下载已发送的缓冲数据(将缓冲区保留在内存中直到下载完成)。
内存限制总是会增加对缓慢客户端处理的限制。
可以提高一些限制,例如使用 X-Sendfile 发送静态文件(支持 iodine,以及当 Puma 或 passenger 在 nginx 下运行时)...但这不是您可以解决的问题。
Puma 在 Ruby 的 GIL(全局指令锁)中处理慢速客户端。这意味着当 Puma 处理慢客户端时,没有其他线程/指令可以执行。
这通常不是问题,但是足够多的慢速客户端会增加上下文切换和系统调用的成本。这可能(可能)显着降低服务器速度。
Passenger 和 iodine 都在 GIL 之外执行缓慢的客户端缓冲,允许这些系统调用真正并发(当多个 CPU 内核可用时)。
这会缓解问题,但不会完全解决问题。
最大的问题通常是 IO 轮询系统。 Puma 的路线图上有一个解决方案(可能已经实现,我不确定)。
其他问题(内存限制和并发限制)相对不太重要,但如果不使用语言扩展(iodine server 是用 C 编写的,Passenger 是用 C++ 编写的)则无法缓解这些问题。
由于 Puma(目前)不需要任何语言扩展(除了它在 C 和 Java 中集成的 HTTP 解析器),这些问题仍然存在。
我应该指出,我是 iodine HTTP/Websocket 服务器的作者,所以我有些偏见。
关于ruby-on-rails - Puma 可以同时缓冲多少个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49395334/
puma-dev 无法启动并因错误而失败: unexpected exit: bash: line 23: exec: puma: not found puma-dev 没有看到我安装了 pu
我一直在从多个来源复制和粘贴以下 puma 系统启动脚本的片段,但它不起作用。系统是Debian 9.6,用户rails通过 rvm 安装了 ruby .用户 rails可以启动命令RAILS_ENV
我使用 ansible 脚本来设置服务器: playbook.yml Gemfile 当我将我的应用程序部署到服务器时,我在 nginx/error.log 中看到了这个: 2016/09/30 20
面临的问题 当我运行 bundle exec cap production puma:start 时,我得到 Puma 已成功启动的响应: DEBUG [e4382d1e] * Pruning
一些指南 ( example ) 推荐这个来启动自己的网络服务器 bundle exec rails server puma 但我总是用 puma 启动服务器直接地 bundle exec puma
在努力让一个新项目工作后,我发现由于某种原因我无法启动我的 rails 服务器。我不断收到以下错误:HTTP parse error, malformed request: # 最佳答案 我能够通过清
我正在使用 Capistrano 将我的 Rails 5 应用程序部署到 AWS EC2 实例。当我输入: cap production deploy 一切顺利,部署成功。但是,重启puma的过程不起
我可以使用 rails s puma 在 rails 中运行 puma 服务器或只是 puma . 根据 this answer , 正在运行 rails s puma使服务器了解 rails 环境。
我正在使用 puma 和 nginx 在 digital ocean 上设置我的 Rails 生产服务器。 按照教程,我在/etc/nginx/sites-available/default 中输入了
我已经为本教程设置了我的服务器 ( https://coderwall.com/p/ttrhow/deploying-rails-app-using-nginx-puma-and-capistrano
我继承了一个代码库,其中的测试已经放弃了一年多一点。我正在尝试尽可能多地清理测试套件,但我很难梳理我的集成测试 1. Capybara 2. Puma, 3. Selenium, 4. 使用 rail
在 Ubuntu 14.04 上,我为 puma 设置了这个简单的 upstart 脚本: /etc/init/puma.conf start on (local-filesystems and ne
这个问题在这里已经有了答案: puma gem - Failed to build gem native extension (13 个回答) 去年关闭。 无法在 macos-10.15.6 上 bu
配置中没有明确的选项——我怎么知道我的 Puma 实例是否在集群模式下运行? 最佳答案 如果 Puma 在集群模式下运行,你应该看到 [12345] Puma starting in cluster
当将 MRI Ruby 2.1.2 与 Puma 一起使用时(假设 1 个 worker 有 8 个线程),GC 何时运行?它是在所有这些线程都空闲时由父工作进程运行,还是由父进程根据需要运行,即使这
我正在运行 Puma 2.8.2 服务器来 stub 我的一些后端服务。有时 Puma 服务器会无缘无故地死掉。 error.log 中没有错误,下面是 access.log 的摘录: 10.210.
我一直在使用 Thin 来运行我的 ruby Sinatra 应用程序,但我现在切换到 Puma。 Thin 创建了我自己使用的日志 log/thin.log。我注意到 Puma 没有生成日志文件
我可以使用以下命令启动 Puma: $HOME/.rbenv/bin/rbenv exec bundle exec puma -C/home/deploy/tasks/shared/puma.rb -
我已将 Puma 添加到我的 sinatra 应用程序中,现在我在终端中获得两行请求输出。我已经检查过,它实际上并没有两次调用代码,而且我猜想可能 Puma 正在与 Sinatra 一起输出请求信息。
我了解 Puma 相对于其他 Rails Web 服务器的优势在于它处理慢速客户端的方式。当 Puma 服务器接收并下载一个(可能很慢的)请求时,它仍然可以接收和下载其他可能下载速度更快的请求,并在慢
我是一名优秀的程序员,十分优秀!