参考https://samsaffron.com/archive/2018/01/18/my-production-ruby-on-rails-cpu-is-at-100-now-what
https://github.com/tmm1/stackprof
以及我的另一份查找内存占用的blog: https://www.jianshu.com/p/637510f4b82f
使用相同的方法 ,稍加修改:
Gemfile
gem 'rbtrace'
gem 'stackprof', require: false
某个controller.rb的某个action内
if params[:rbtrace] == 'go'
require 'rbtrace'
pid = Process.pid
system("nohup bundle exec rbtrace -p #{pid} -e 'load \"/tmp/cpu_dump.rb\"' &")
end
cpu_dump.rb文件内容:
Thread.new do
require "stackprof"
StackProf.start(mode: :cpu)
sleep 10
StackProf.stop
StackProf.results("/tmp/perf");
end.join
触发下执行cpu_dump.rb文件(如果是测试服就调大sleep 比如100s, 人为触发下各个action,最后得到perf文件,如果正式服就静等生成perf)
$ stackprof perf
分析得出结果:
2019-09-16 at 3.59 PM.png发现有个 Conter.rbx下的count_word可疑。
网友评论