Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法找出导致rails应用程序出现性能瓶颈的原因_Ruby On Rails_Ruby_Ruby On Rails 3_Performance_Profiling - Fatal编程技术网

Ruby on rails 无法找出导致rails应用程序出现性能瓶颈的原因

Ruby on rails 无法找出导致rails应用程序出现性能瓶颈的原因,ruby-on-rails,ruby,ruby-on-rails-3,performance,profiling,Ruby On Rails,Ruby,Ruby On Rails 3,Performance,Profiling,根据我的heroku日志,我的rails应用程序平均为1700到2500毫秒的请求提供服务,这是整个往返过程。我使用new relic来评测我的应用程序,似乎大部分请求都不是花在我的数据库中,而是花在new relic的Web事务部分。控制器类别似乎是请求中速度最慢的,其次是数据库类别中的SQL-SELECT段 我不太确定是什么原因导致我的控制器出现性能瓶颈,我也不认为我可以在不购买高级版本的情况下深入了解new relic。我最近向我的应用程序的外键添加了索引,尽管我不认为这在数据库响应时间方

根据我的heroku日志,我的rails应用程序平均为1700到2500毫秒的请求提供服务,这是整个往返过程。我使用new relic来评测我的应用程序,似乎大部分请求都不是花在我的数据库中,而是花在new relic的Web事务部分。控制器类别似乎是请求中速度最慢的,其次是数据库类别中的SQL-SELECT段

我不太确定是什么原因导致我的控制器出现性能瓶颈,我也不认为我可以在不购买高级版本的情况下深入了解new relic。我最近向我的应用程序的外键添加了索引,尽管我不认为这在数据库响应时间方面有多大区别


我知道这些信息不足以找出造成这些瓶颈的原因,但我甚至不知道从哪里开始,或者提供什么信息。如果人们能告诉我诊断这些问题需要什么信息,那将对我有所帮助。

请看下面的幻灯片:

可能还不够,但它会遇到一些常见故障

挖掘一点deaper看看这个视频:

它更长,但有很多地方可以看


另一方面。您使用CDN吗?

New Relic for Ruby包含一个免费的独立开发模式。在RAILS_ENV=development中运行时,New Relic gem会添加一个路由,为每个请求显示详细的概要文件。点击应用程序几次后转到

配置文件包括每个SQL查询以及代码组件的时间。您可以使用将大块代码分解为更小的段或单独计时的方法。此功能非常类似于付费专业版中的事务跟踪,一个主要区别是您不希望在生产环境中运行免费开发模式

充分披露:我为NR工作。不过,没有多少人知道免费开发模式,所以我认为值得一提


您可以使用类似的东西使Javascript加载速度更快,这将异步并行加载您的JS文件。

我也听说过使用它查找性能问题的好报告,如果NewRelic没有足够的帮助,另一个工具可能会派上用场。最好的办法是将动作的源代码发布为slow。另外,请记住,如果您正在进行大量循环,那么视图中可能会出现瓶颈。@SrdjanPejic我想可能就是这样。在我的观点中,我做了很多循环和联想。将这些关联移动到模型中的实例方法中会提高性能吗?@JustinMeltzer如果是这样,您可能会遇到n+1问题。无论在何处查询父对象,都可以添加:include或:joins,但不能同时添加两者以预加载关联。是否可以发布其中一个慢速控制器方法的代码?如果您担心安全性,可以重命名/匿名某些类。我认为在这种情况下,看看你是否做错了什么会有帮助。您也可以在日志中看到很多-f log/development.log postgres报告每个查询的查询时间。谢谢,这太棒了。不,我目前没有为我的资产使用CDN。哦,很有趣。谢谢顺便说一句,我目前正在以Heroku插件的形式运行New Relic,所以我认为我在开发中无法访问它。我应该把它捆成宝石吗?这会对NR heroku插件产生负面影响吗?您使用的是Cedar堆栈吗?newrelic_rpm gem将在您的gem文件中。如果你在竹上,插件将被安装。无论哪种方式,当您在自己的机器上运行站点时,您都可以访问NR-dev模式。我在heroku上使用竹子,但在我的本地开发网站上似乎没有NR开发模式。/newrelic路线没有退出。我通过heroku的命令行界面安装了NewRelic插件,而且我从来没有将生产代码拉到开发中,因此它在我的本地机器上不存在是有意义的。我缺少什么?如果我将newrelic_rpm添加到我的gem文件中,然后将其推到生产环境中,这会干扰已经通过heroku CLI安装在生产环境中的插件吗?我不建议将插件和gem混合使用。您可以将gem添加到developmentgemfile组中。