0

我正在运行一个 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
  • 我不想在服务器端缓存任何东西,因为我需要处理新数据。

谢谢 !!!

4

1 回答 1

0

在您使用的框架之外,性能和整体行为仍将取决于您自己的代码。换句话说,您已经正确列出了影响性能的主要因素,但是您自己的代码会对它产生如此重大的影响,以至于几乎不可能提前知道。

顺便说一句,我想说您需要更详细地描述有关您的应用程序的一些内容:

  • 您说每个请求都会占用大量 CPU,但您的意思是什么?每个请求需要 1 毫秒吗?10 毫秒?100 毫秒?
  • 你访问数据库吗?你的数据库有什么特点?
  • 不管有没有数据库,你有没有磁盘IO?它有多重要?

...但是如果您的应用程序非常简单,不会过多地访问磁盘(或者根本不会......您的请求可能是只读的并且所有内容都被缓存),并且您受 CPU 限制,只需在您的服务器将是您可以做的最重要的事情。

于 2013-10-23T11:57:31.433 回答