网站最近性能时差时好(同一个页面),找来找去,发现 cpu 涨幅很有规律。
后来发现是 crontab 中的定时任务导致(手动单独执行任务,cpu 马上飙升)。
每次 crontab 中执行 bundle exec 某个 task 的时候,cpu 就飙升,然后接着网站变慢(单核 cpu)。
因为有多个定时任务,尝试错开他们的执行时间,似乎缓解了一点,但是任然不能忍受啊~~
为什么 bundle exec 这么占 cpu 啊。。即便 task 里面什么代码也没有,是因为每次都加载 rails 的原因吗?
= =!
bundle exec 只是负责加载 Gemfile.lock 中的 gem,把他们加到 $LOAD_PATH 中,然后 require.
你最好把 cron job 放到单独的机器上去执行。
你该买机器了。。。
每次 bundle exec 都会重新加载应用的整个执行环境,这确实是个耗 cpu 的过程,sidetiq 是用 sidekiq 跑,环境只加载了一次
#4 楼 @xiaoronglv 除了 crontab 的时候,其他的 cpu 占用是非常低的,速度也在基本上在 50ms-100ms 左右。如果为了 crontab 升级机器,感觉太不划算了~ 现在改用 sidetiq 来跑,cpu 很低,除了 https://github.com/tobiassvn/sidetiq/wiki/Known-Issues 这个坑~~~
rake task 本身并不慢,但如果在 task 中加载了 rails 环境那就会很慢,不过大部分 task 都需要加载 rails 环境。 可以考虑用 sidekiq。