我正在为一个通常有1-2个并发用户的小型内部应用程序使用付费Heroku(35美元/月,2个web dyno,50美元/月的silver postgresdb)计划。数据库快照大小小于1MB。
应用程序是Rails 4.1。在过去的两周里,生产环境的性能显著下降,Chrome开发工具报告的响应时间如8s
典型:
总计8.13秒
失速3.643ms
DNS查找2.637ms
初始连接235.532ms
SSL133.738ms
已发送请求0.546ms
等待(TTFB)3.43s
内容下载4.47s
我使用Nitrous开发环境,并在具有非预编译资产(具有镜像数据库)的开发服务器上获得sub-1s响应。
我是一个新手程序员,不清楚如何调试它。为什么在$85/mo+Heroku计划中,我会看到性能比开发环境慢800%?考虑到我目前的编程技能水平,我的应用程序可能优化得很差(其中有几个N+1查询…),但当生产有1-2个并发用户时,情况会有多糟糕??
日志中的示例(如果有帮助):
sample#current_transaction=16478 sample#db_size=18974904bytes sample#tables=28 sample#active-connections=6 sam
ple#waiting-connections=0 sample#index-cache-hit-rate=0.99929 sample#table-cache-hit-rate=0.99917 sample#load-avg-1m=0.365 sample#load-avg-5m=0.45 sample#load-avg-15m=0.445 sample#read-iops=
37.587 sample#write-iops=36.7 sample#memory-total=15405616kB sample#memory-free=1409236kB sample#memory-cached=12980840kB sample#memory-postgres=497784kB
服务器日志示例:Completed 200 OK in 78ms (Views: 40.9ms | ActiveRecord: 26.6ms
我在开发服务器上看到了类似的数字,但实际的视觉性能是夜以继日的。dev的响应正如您所期望的那样-sub-1s响应和渲染。生产服务器延迟4-5s。
我不认为这与建议的ISP有关,因为我实际上一直在旅行,看到了来自美国和欧洲的相同性能问题。
在Heroku上将NewRelic add-on
添加到您的应用程序生态系统中,并探索正在发生的事情。您可以从Heroku的仪表板中进行操作。选择免费计划,您将获得为期2周的全功能试用期。试用期后会有一些限制,但无论如何,这足以衡量小型应用程序的性能。此外,您还可以添加Logentries add-on
,并通过web界面访问应用程序的日志历史记录。