Rails 使用 Newrelic 与 ab 工具 尝试了解项目的性能

breeze · 发布于 2017年07月13日 · 343 次阅读
001e5a

压测1

  • 服务器为 8核16g, 使用puma开启15个wokers
  • 每秒200请求压测 重度使用mysql的api接口
总结:
  1. 平均每个请求的时间都要1.6s以上,apdex得分非常的低
  2. ruby占用时间为60%左右, mysql占了将近40%。
  3. 尝试通过提升服务器的配置性能到12核,puma开多几个实例。效率还是很低,并没有与提升的配置成正比。

压测2

  • 在上一个压测中,ruby占用的时间实在太多了,又没有解决思路,决定转变下压测条件。
  • 使用nginx做负载均衡 ,性能好的服务器 weight 为2, 另一个weight 为1。
  • 每一台服务器为 4核8g, 使用puma开启8个wokers
  • 第二台服务器为 2核4g, 使用puma开启5个wokers
  • 每秒200请求压测 重度使用mysql的api接口
总结:
  1. 效率明显上升,apdex得分看起来不错了😂
  2. 虽然效率上升了,但是ruby占用时间还是很高(这个需要继续探索)
  3. 在服务器的配置 比 压测1的服务器配置差的情况下,既然效率会更高。这是负载均衡的功劳了,成功让对单台服务器的并发降了下来。
  4. 并发越高,服务器性能越差(参考下面第二张图)。 * * *

压测3

  • 分析代码后,代码并没有可疑之处。可是为什么ruby占用时间那么高呢?
  • 怀疑是在什么地方排队等候,花了时间。
  • 在等mysql?redis?
  • rails中mysql默认连接池为5,尝试压测不同数据的连接池。
  • 为减少影响,使用单台服务器 服务器为 4核8g, 使用puma开启8个wokers
总结:
  1. 5pool的条件下: ruby花费了60%的时间。
  2. 提升了pool之后: ruby花费的时间降下来了,花了20%左右。
  3. 原来ruby花费了大部分的时间,是在等待mysql的连接池啊。
  4. 现在是mysql占用大部分的时间了,可以专心的优化sql之类的了💪

追加

  • 之后尝试使用 gem 'connection_pool' 为 redis_store 增加了连接池,增加后没有什么变化。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册