部署 项目每次重新部署后,第一次打开页面都很慢,有时甚至报 504 超时

lengcb · 2018年04月18日 · 最后由 lengcb 回复于 2018年04月24日 · 3530 次阅读

项目网站做了部署,用的nginx+puma+mina这一套来部署的,但是每次重新发布后,第一次打开页面都要等好长时间,不知道该怎么查找原因。只是怀疑项目中好多js,各种加载,挺乱的,怀疑是这个原因。想问一下该怎么查找原因呢? 还有一个问题,就是puma+mina这种部署跟unicorn+capistrano这种部署方式各有啥优劣呢?看过一些博客,只是说了一下puma、unicorn等app服务器的一些特点区别。

共收到 22 条回复

用 chrome 的 Timing 可以看到哪些地方加载慢,另外可以看下 rails 的日志啊

jasonliu 回复

我查了一下,发现原因是rails预加载慢,第一次打开页面慢,后面完全没问题了。正在查rails预加载的东西😁 能给介绍下吗?

lengcb 回复

首先看你 load 了哪些 plugin 和 gems,还有就是有没有调用一些第三方的服务,这些都有可能导致响应时间变慢,一定要通过日志调试之类的发现线索,而不是靠猜测

jasonliu 回复

嗯嗯,现在就是不会查原因,预加载有日志可查吗?

部署后可以自己写个东西先去访问下首页

asset_pipeline预编译,编译后的静态文件可以走nginx代理

用了newrelic_rpm这个插件,测试了一下性能,发现了一些问题。主要问题出在layouts/application.html.erb 这个公共模板上,引用js、css耗时时间太长。😓

我这里也出现同样的问题,但是我这里是开发环境,也是application.html.erb,去掉stylesheet_link_tag就没问题,就算application.css是空的,只要有stylesheet_link_tag,重启后第一次载入页面速度就会特别慢,第二次开始又不会有问题,每次都是重启后的第一次慢,你的rails是5.2.0吗?

你先说你那个服务器有没有足够的内存,CPU 配置发出来看看

内存不够,例如不到 2G,发布就有可能会这样

fan124 回复

是的,就是这个问题。我用的rails事5.0.1版本。我用的公司的测试服务器

huacnlee 回复

谢谢,我查查看😁

@lengcb 静态资源要用 nginx 处理,看看Rails对应环境(config/environments/***.rb)的配置是不是下面这样的

Rails.application.configure do
  config.cache_classes = true
  config.eager_load = true
  config.assets.compile = false
  config.serve_static_files = false
end

部署时配置 puma 的重启方式为 phased restart (貌似和 preload_app! 有冲突)。

lengcb 回复

生产环境配置文件里:

config.assets.compile = false

先预编译:

rails assets:precompile

生成静态文件到public,然后在nginx配置,去handle这些文件。

huacnlee 回复

应该不是内存的问题吧,试用率才60%。

lengcb 回复

你看看 #14楼 的回复

huacnlee 回复

嗯嗯

junzhepan 回复

谢谢,处理好了

lifuzho 回复

谢谢!处理好了!

你有没有用到这个gem geocoder, 可以排除一下一些gem包的原因,可以看看application_controller.rb里面有没有对首次访问做什么特殊操作。

rina 回复

项目中有这个插件,application_controller.rb没有什么特殊的操作。问题应该就是文件预编译的问题,静态文静都没用nginx处理,几种环境中gem乱引用,css,js处理也不是很好。接手的这个项目问题还挺多的,继续研究了,相信会慢慢维护好的,也会学到挺多的。谢谢!geocoder这个插件我看看去

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册