我正在运行一个 Finatra 服务器(https://github.com/capotej/finatra),它是一个基于 Sinatra 的基于 Finagle(一个异步 RPC 系统)的 scala Web 框架。应用程序应设计为同时接收 10 到 50 个请求。每个请求都非常占用 CPU,主要是由于解析和序列化大型 JSON 以及对数组的操作,如排序、分组等......
现在我想知道以下参数对性能的影响以及如何组合它们:
- 服务器内存
- 服务器核心数
- JVM 堆大小
- 在我的未来池中并行运行的线程数
作为部分回应,我会说:
- 我应该根据 RAM 调整 JVM 堆大小
- 拥有多个内核可以提高并发工作负载下的性能,但并不能真正加快单个请求的处理速度。
- 相反,拥有大 RAM 可以显着加快单个请求的执行速度
- 我的未来池中的线程数必须根据我的核心数进行调整。
编辑
无论代码如何,我都想比较性能,只关注硬件/线程模型。假设代码已经优化。附加信息 :
- 我正在构建一个数据报告 API。请求的处理时间很大程度上取决于我正在处理的数据集。对于大数据集,它最多可以达到 10 秒。
- 我从第三方 API 检索大部分数据,但我也在使用 c3po 连接池机制访问 MySQL 数据库。请求的执行另外委托给未来池以防止阻塞。
- 除 MySQL 外无磁盘 IO
- 我不想在服务器端缓存任何东西,因为我需要处理新数据。
谢谢 !!!