ruby-on-rails - Heroku [Performance] 上的 RoR:线程、工人、whacamole 还是 dynos?
问题描述
APP:Heroku 标准 2x 测功机上的 Rails 4.2.9。
DB:漂移计划上的 MySQL Heroku 附加 ClearDB
Puma:工人 4,threads_count 1
每天不超过 10 人访问此应用程序。就他们的使用而言,这很好。没有关于速度或停机时间的投诉。
该应用程序有很多.sum
和.each { |n| total += n.value}
类型的东西,我怀疑这是消耗内存的东西。
问题是这个应用程序每天都会超过 1 GB 的内存使用量。
对于这么小的操作来说,与下一个测功机的价格差异是不合理的。此外,考虑到使用它的员工不到 10 人,多付 5 倍的费用似乎很疯狂,而不是让应用程序运行得更好!
无论如何,当我读到这件事时,我似乎变得越来越不确定。问题是:
在这种情况下降低内存使用的最佳方法是什么?我应该关注哪条路径?
- 将 puma 线程更改为更多?
- 将彪马工人换成更多?(较少的?)
- 使用
whacamole
gem 并每天重新启动几次测功机? - 切换到 2 个标准 1x 测功机而不是 1 个标准 2x?
- 还有什么?完全不同?
更新(开发环境的一些 PS 输出)
CPU MEM TIME BOSS
-
0.0 0.1 0:19.32 cluster worker 1: 58165
0.0 0.4 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
0.0 0.1 0:19.32 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
3.3 0.3 0:19.38 cluster worker 1: 58165
0.3 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
25.7 2.1 0:19.94 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
96.3 2.3 0:21.02 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
96.7 2.4 0:22.09 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.17 3.11.4 (tcp://localhost:3000) [finan]
-
96.9 2.5 0:23.09 cluster worker 1: 58165
0.1 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
0.0 0.2 0:39.90 cluster worker 0: 58165
-
97.5 2.6 0:24.15 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
98.5 2.7 0:25.23 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
98.2 2.8 0:26.32 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
90.1 2.8 0:27.35 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
97.9 2.9 0:28.42 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
85.4 3.2 0:29.43 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.4 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
91.7 4.9 0:30.42 cluster worker 1: 58165
0.0 0.2 0:39.90 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
18.4 4.1 0:31.06 cluster worker 1: 58165
0.0 0.1 0:39.90 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
0.2 3.5 0:31.06 cluster worker 1: 58165
0.0 0.1 0:39.90 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
11.7 3.7 0:31.20 cluster worker 1: 58165
2.5 0.4 0:39.94 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
0.1 3.7 0:31.20 cluster worker 1: 58165
0.0 0.4 0:39.94 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
0.0 3.5 0:31.20 cluster worker 1: 58165
0.0 0.4 0:39.94 cluster worker 0: 58165
0.0 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
-
0.4 0.2 0:11.18 3.11.4 (tcp://localhost:3000) [finan]
0.0 3.4 0:31.20 cluster worker 1: 58165
0.0 0.4 0:39.94 cluster worker 0: 58165
解决方案
推荐阅读
- ios - Swift 5.1 和 Alamofire 5.1:GET 方法错误
- api - 从 Kubernetes Pod 内部为 API Metric Server 使用 cURL
- php - Javascript没有以AJAX MODAL形式获取变量的值
- flutter - 仅在页面重建或应用程序重新加载时才加载数据 - 提供者
- flutter - 如何将带有子目录的目录/文件夹复制到另一个位置?
- unity3d - 2个统一对象的脚本可以获取彼此的变量吗?{已回答}
- c# - 如何在 MSTest 中引发事件?
- linux - 试图运行 sh 脚本并得到 docker-compose not installed 错误?
- c# - 从进程中读取 UDP 连接信息?
- python - 如何在方法链中组合 pandas 索引列?