Rails Puma 突然 CPU 占用 99%+

jl5161 · 2018年05月03日 · 最后由 IChou 回复于 2018年05月04日 · 2563 次阅读

服务器采用阿里云 用 PUMA 启动生产环境 运行一段时间之后 总是在几分钟内 cpu99%+ 由于目前处于测试阶段故而没有请求发生 请教大概什么原因? 新手求救

补充阿里云 CPU 截图 2 分钟内瞬间上 100%

业务本身有没有需要大量运算或耗时很长的操作

IChou 回复

没有 产品没上线 一个请求都没 启动后就放在那 然后阿里云就报警了

去线上看下 puma 的日志

zhaoyshine 回复

抱歉 请问如何查看 谢谢

zhaoyshine 回复

是 production log 吗

production log 是 rails 输出的日志,可以看看能不能看出问题,是不是请求夯住了

另外 puma 还有一个单独的日志,记录 puma worker 的启/杀记录的,在 config/puma.rb 里面通过 stdout_redirect 设置的,也看下吧

你这个明显不正常, puma 的 worker_timeout 你设置的是啥?

IChou 回复

worker_timeout 默认的 没设置

改成 5 试试,cpu 再 100% 的时候应该能看到 puma 的 worker 被杀死然后重启

那就基本可以确定是你们的某个请求会导致一个长时间运行的任务,grep 一下 production.log 看看有没有执行时间特别长的请求,或者只看到进来没看到相应的请求

IChou 回复

好谢谢指教 如果有需求可以私信你吗?

可以的

IChou 回复

半夜又出现了 查看了 puma.log puma_error.log 均只有=== puma startup: 2018-05-03 22:56:24 +0800 === 启动记录, production.log 并未有异常记录 , 在 cpu 高负载的时候 api 请求并未收到

jl5161 回复

worker_timeout 改了没? 看截图 这个线程已经运行了 14min ?因催思婷

日志不多的话,grep 一下 20 分钟内 production.log 里每个请求的「开始行」和「结束行」,你会发现有一个请求没有打印「结束行」,因为处理他的线程彻底僵死了,连 puma 都干不掉它

或者临时把线上日志设置到 debug 层级,应该也可以发现点什么

或者查下上游 nginx 的日志,应该有返回状态为 499 的请求

最后,这种情况有个简单粗暴的处理方式,可治标不治本 —— 上 monit

不清楚,看一下这个帖子能不能帮到你https://ruby-china.org/topics/35236

zhaoyshine 回复

不是一类问题,没什么参考价值 这个九成(或者十成,哈哈哈哈)可能是代码写得有问题

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