我的Rails应用程序在我的临时服务器上运行得很慢,最令人困惑的是每个请求的日志输出的最后一行。看起来视图和数据库的时间甚至还没有接近整个渲染时间。在一个页面上,完成时间大约是1000毫秒,视图时间大约是450毫秒,数据库时间大约是20毫秒。呈现页面所需的其余时间从何而来?
bpsygsoo1#
当事情神秘的时候...侧写师是你的朋友!剖析器将绘制哪些方法被调用最多以及在每个方法调用中花费多长时间的统计。当我在RubyLand中时,ruby-prof为我提供了一个技巧,它将生成一个漂亮的调用图(如果需要,可以是html格式),这使得很容易看到哪些方法正在减慢您的请求。
balp4ylt2#
我发现很大一部分渲染时间都花在Rails创建和准备活动记录对象上。在查询之后和视图之前。例如,这取决于从'find'返回的记录数量。
6mw9ycah3#
我推荐使用New Relic's RPM service,它有一个免费的版本,但是Bronze服务(每月40美元)非常棒,可以进一步帮助跟踪这些问题。
unhi4e5o4#
我正准备用同样的答案来重新审视这个问题,所以我就顺便提一下。这是一个非常小的ruby-prof snippet,来自一个视图渲染。令人惊讶的是,引擎盖下有这么多东西。
3pvhb19x5#
除了渲染和数据库时间之外,控制器代码和Rails框架也会花费一些时间。如果分配给临时服务器的资源太少,这会非常慢。但是,您不应该看到日志中的持续时间并不总是完美的,尤其是数据库持续时间。
dfddblmv6#
你的apache日志是怎么说的?它肯定会有不同的数字来显示服务请求所需的时间。Apache向Rails发送请求,Rails处理它,这就是您在生产日志中看到的内容。所有的HTML仍然需要在你的浏览器上渲染(大量的CSS,图像,js等)。尝试使用火狐扩展httpwatch来了解UI元素的渲染时间,它应该会加起来。如前所述,NewRelic应该给予你花在各种活动上的时间进行体面的分解(M V C)
rjjhvcjd7#
我遇到了同样的问题,经过一些研究,我发现数据库查询的总毫秒数是不正确的。不确定这是否与MongoDB有关。我使用MongoDB和MongoID驱动程序,而不是SQL数据库。为了深入研究,我将Mongo日志记录器切换到调试模式。这可以在应用程序.rb中完成:
Mongoid.logger.level = Logger::DEBUG Mongo::Logger.logger.level = Logger::DEBUG
这使得对MongoDB的每一个查询都可以在日志中看到,包括每个查询的时间,而且我很震惊地看到有多少查询被触发,在优化了一些查询并减少了查询的数量之后,我能够将rails应用程序的性能提高200%。
7条答案
按热度按时间bpsygsoo1#
当事情神秘的时候...侧写师是你的朋友!
剖析器将绘制哪些方法被调用最多以及在每个方法调用中花费多长时间的统计。
当我在RubyLand中时,ruby-prof为我提供了一个技巧,它将生成一个漂亮的调用图(如果需要,可以是html格式),这使得很容易看到哪些方法正在减慢您的请求。
balp4ylt2#
我发现很大一部分渲染时间都花在Rails创建和准备活动记录对象上。在查询之后和视图之前。例如,这取决于从'find'返回的记录数量。
6mw9ycah3#
我推荐使用New Relic's RPM service,它有一个免费的版本,但是Bronze服务(每月40美元)非常棒,可以进一步帮助跟踪这些问题。
unhi4e5o4#
我正准备用同样的答案来重新审视这个问题,所以我就顺便提一下。这是一个非常小的ruby-prof snippet,来自一个视图渲染。令人惊讶的是,引擎盖下有这么多东西。
3pvhb19x5#
除了渲染和数据库时间之外,控制器代码和Rails框架也会花费一些时间。如果分配给临时服务器的资源太少,这会非常慢。但是,您不应该看到日志中的持续时间并不总是完美的,尤其是数据库持续时间。
dfddblmv6#
你的apache日志是怎么说的?它肯定会有不同的数字来显示服务请求所需的时间。
Apache向Rails发送请求,Rails处理它,这就是您在生产日志中看到的内容。
所有的HTML仍然需要在你的浏览器上渲染(大量的CSS,图像,js等)。尝试使用火狐扩展httpwatch来了解UI元素的渲染时间,它应该会加起来。
如前所述,NewRelic应该给予你花在各种活动上的时间进行体面的分解(M V C)
rjjhvcjd7#
我遇到了同样的问题,经过一些研究,我发现数据库查询的总毫秒数是不正确的。不确定这是否与MongoDB有关。我使用MongoDB和MongoID驱动程序,而不是SQL数据库。为了深入研究,我将Mongo日志记录器切换到调试模式。这可以在应用程序.rb中完成:
这使得对MongoDB的每一个查询都可以在日志中看到,包括每个查询的时间,而且我很震惊地看到有多少查询被触发,在优化了一些查询并减少了查询的数量之后,我能够将rails应用程序的性能提高200%。