jjzjj

ruby-on-rails - Rails 查询执行导致数据库峰值

我的Rails应用程序出现问题,一些随机查询需要大约5秒或更长时间才能完成。大多数时候,查询非常简单(select*fromxwhereid=?),而且字段甚至也被编入索引。这里有一些关于设置的更多信息:反向nginx代理背后的Puma3.5.04个worker,每个worker最少4个,最多8个线程。Rubyv2.2.3,Railsv4.2.4PostgreSQL9.4数据库线程池设置为最多60个连接监控应用8GBRAM、4个CPU、SSD。我在查看Appsignal中的查询性能时发现了这一点。我注意到大多数查询在几毫秒内完成,然后时不时地,仍然在同一个请求中,有多个查询需要5秒以上

ruby - Puma 登录到哪里

我一直在使用Thin来运行我的ruby​​Sinatra应用程序,但我现在切换到Puma。Thin创建了我自己使用的日志log/thin.log。我注意到Puma没有生成日志文件(我看不到)。我已经尝试用谷歌搜索有关此的文档,但没有真正找到任何东西。我想知道您是否/如何在Puma中指定日志路径。如有任何帮助,我们将不胜感激。亚历克斯 最佳答案 检查示例config.rb按照repo协议(protocol)的建议README.如图所示:#RedirectSTDOUTandSTDERRtofilesspecified.The3rdpar

ruby-on-rails - 服务器发送的事件和 Rails Streaming

我正在试验Rails4ActionController::Live和ServerSentEvents。我正在使用MRI2.0.0和Puma。就我所见,每个连接的客户端都与服务器保持事件连接。我想知道是否可以在不保持所有响应流运行的情况下利用SSE。Puma使用线程管理多个连接,我想当前连接数是有限制的。如果我想支持成千上万的客户注册到我的Rails应用程序以参加SSE事件的真实场景怎么办?有没有例子?此外,我通常在nginx反向代理后面运行Rails应用程序服务器。它需要任何特定的设置吗? 最佳答案 SSE的构建方式是客户端打开到服

ruby - 使用 Puma 的工作线程、线程和池大小

如果我有一台只有1个核心的服务器,多少个pumaworker、线程和多少数据库池大小才合适?这里的一般拇指是什么? 最佳答案 这不是一个简单的答案。信息的两个主要来源是:Pumagithubrepository(作者的观点)Heroku'swebpage(主要大用户观点)不幸的是,它们不一致主要是因为heroku具有不同的部署指标和术语。所以我最终遵循了puma存储库指南,其中写道:每个核心一个worker要根据RAM可用性和应用程序确定线程线程=连接池所以线程数多半是试探操作。 关于r

ruby-on-rails - Foreman/Puma 未使用开发环境中的指定端口

我在application.yml中将端口设置为3000(figaro管理环境变量)railss使用端口3000但是当我运行foremanstart(按照Heroku的建议)时,我得到以下输出14:53:23web.1|startedwithpid2442514:53:23web.1|[24425]Pumastartinginclustermode...14:53:23web.1|[24425]*Version2.11.1(ruby2.2.0-p0),codename:IntrepidSquirrel14:53:23web.1|[24425]*Minthreads:5,maxthrea

ruby - 如何检测我的代码运行的是 "inside"Sidekiq 服务器还是 Puma?

我使用Puma作为网络服务器,使用Sidekiq作为我的队列运行器。对于多种事物(数据库连接、Redis连接、其他外部服务),我使用ConnectionPoolgem来管理对连接的安全访问。现在,根据我是在Sidekiq还是Puma的上下文中运行,我需要这些池的大小不同(分别与Sidekiq线程或Puma线程的数量一样大,而且它们是不同的)在您的初始化程序中,根据执行上下文了解连接池大小的最佳方法是什么?谢谢! 最佳答案 您使用Sidekiq.server?当不在Sidekiq进程本身内运行时返回nil。

ruby-on-rails - 如何为 Puma 检查 Rails 应用程序的线程安全

我希望使用Puma网络服务器将我的Rails应用程序部署到Heroku。但是,我不太确定是否所有的Gem都是线程安全的。阅读所有Gems的源代码对我们来说不是可行的选择。有没有办法自动检查所有Gem的线程安全性?或者,如果执行/检测到线程不安全代码,Puma会提示/显示特定的错误日志吗? 最佳答案 一般检测不到线程安全。如果有某种方法可以自动检测到它,您的编译器/解释器可能会警告您。Raceconditions无法被自动系统检测到,它们甚至难以重现。取决于您的解释器:CRuby有GIL,所以使用Puma是没有意义的。如果您使用的是J

ruby-on-rails - 我的应用程序一直在创建数据库连接,我该如何追踪原因?

我有一个在Heroku上运行的RubyonRails应用程序。我不断在日志中收到这些消息:2015-05-05T16:11:14Zapp[postgres.27102]:[AQUA]connectionreceived:host=xx.xxx.xx.26port=602782015-05-05T16:11:14Zapp[postgres.27102]:[AQUA]connectionauthorized:user=postgresdatabase=somedb2015-05-05T16:11:14Zapp[postgres.27103]:[AQUA]connectionreceived

ruby-on-rails - PG::TRDeadlockDetected:错误:检测到死锁

我正在通过bundleexecpumactl-Fconfig/puma.rbphased-restart重新启动8个pumaworker,效果很好。现在我收到越来越多的postgres错误:PG::TRDeadlockDetected:ERROR:deadlockdetected我发现大约有50个空闲的postgres进程在运行:postgres:myappmyapp_production127.0.0.1(59950)idlepostgres:myappmyapp_production127.0.0.1(60141)idle...当我运行bundleexecpumactl-Fconf

ruby-on-rails - 多进程VS多线程服务器最受益于什么?

谁能解释一下每种并发方式的瓶颈是什么?Unicorn(基于进程)和Puma(基于线程)等服务器。是否每种方法都更喜欢CPU内核?线程?或者只是时钟速度?还是特殊组合?如何确定在使用专用服务器的情况下所需的最佳CPU特性?如何确定Unicorn的最佳worker数量,或Puma的threads数量? 最佳答案 Unicorn是基于进程的,这意味着每个ruby​​实例都必须存在于自己的进程中。每个进程可能在500mb左右,这将很快耗尽系统资源。基于线程的Puma理论上不会使用相同数量的内存来获得相同数量的并发。Unicorn,由于是多个