配置是 8G 内存 +2 核 CPU 的云主机,12 个 nginx 进程,unicorn 的 worker 是 20 个。
发布新版本时先
rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile
然后 rake stop
大概需要 10 几秒钟,之后 rake start
又是 10 几秒。
问题似乎在并发多时(低峰期也有每秒 10 多个请求),rake start
后 cpu 就满了,看 rails log 是有处理请求的,但 nginx 基本就是 499 和 502 之类的响应。
尝试的解决方法是,kill 掉 nginx 进程,重新 start unicorn 再 start nginx 后恢复正常了。而且,看 rails log 有时会有 missing views 文件的信息(这个很让人费解,因为文件是存在的)。如果部署时并发不多就不会出现这种问题。个人猜测,因为请求比较多,unicorn 启动后 20 个 worker 进程同时处理请求,但因为加载 rails 环境什么的都在占用资源,结果是很多 worker 都没有起来(log 里有 killed 的日志)。我在想,配置再升级到 4 核 CPU 是否能好些?但平时 CPU 利用率只是 30% 左右的。现在每次部署都很闹心啊,该如何能只几十秒停服务的部署啊?