Multithreading 硬件对异步JVM服务器性能的重要性
我正在运行一个Finatra服务器(),它是基于Finagle(一个异步RPC系统)之上构建的、受sinatra启发的scala web框架。 应用程序的设计应该能够同时接收10到50个请求。每个请求都相当占用CPU,主要是由于解析和序列化大型JSON以及对数组的操作,如排序、分组等 现在我想知道以下参数对性能有什么影响,以及如何将它们结合起来:Multithreading 硬件对异步JVM服务器性能的重要性,multithreading,concurrency,jvm,hardware,finagle,Multithreading,Concurrency,Jvm,Hardware,Finagle,我正在运行一个Finatra服务器(),它是基于Finagle(一个异步RPC系统)之上构建的、受sinatra启发的scala web框架。 应用程序的设计应该能够同时接收10到50个请求。每个请求都相当占用CPU,主要是由于解析和序列化大型JSON以及对数组的操作,如排序、分组等 现在我想知道以下参数对性能有什么影响,以及如何将它们结合起来: 服务器的RAM 服务器的核心数 JVM堆大小 未来池中并行运行的线程数 作为部分回应,我想说: JVM堆化应该根据RAM进行调整 拥有多个内核可
- 服务器的RAM
- 服务器的核心数
- JVM堆大小
- 未来池中并行运行的线程数
- JVM堆化应该根据RAM进行调整
- 拥有多个内核可以提高并发工作负载下的性能,但不会真正加快单个请求的处理速度李>
- 相反,拥有大RAM可以显著加快单个请求的执行速度
- 我未来池中的线程数必须根据我的内核数进行调整李>
- 我正在构建一个数据报告API。请求的处理时间在很大程度上取决于我正在处理的数据集。对于大型数据集,它最多可以达到10秒
- 我从第三方API检索大部分数据,但我也使用c3po连接池机制访问MySQL数据库。请求的执行被另外委托给未来的池,以防止阻塞
- 不包括MySQL的磁盘IO
- 我不想在服务器端缓存任何东西,因为我需要 处理新数据
谢谢 性能和总体行为仍将取决于您自己的代码,而不是您正在使用的框架。换句话说,您已经正确地列出了影响性能的主要因素,但是您自己的代码将对其产生重大影响,因此几乎不可能提前知道 我要说的是,您需要更详细地描述应用程序的一些特性:
- 你说每个请求都是CPU密集型的,但这是什么意思?每个请求需要1毫秒吗?10毫秒?100毫秒
- 你访问数据库吗?您的数据库有哪些特点
- 无论是有数据库还是没有数据库,您都有磁盘IO吗?它有多重要