Java 在一个需要5毫秒处理的页面上多个核心的影响

Java 在一个需要5毫秒处理的页面上多个核心的影响,java,multithreading,spring,tomcat,scalability,Java,Multithreading,Spring,Tomcat,Scalability,我的spring应用程序的页面渲染需要5毫秒,使用ab,我每秒收到大约200个请求 我在一个单一内核的虚拟机上进行了测试 现在,这个页面只需获取一个xml文件并解析它,初始化一个对象,然后将该对象插入mysql 现在假设mysql没有阻塞(连接池不够大或表锁),添加另一个内核应该使我每秒的请求数增加一倍,对吗 如果我在一个线程命中tomcat的情况下每秒收到200个请求,我应该在增加线程的同时继续加倍我的rps,对吗?(显然在某一点上) 通常的瓶颈是什么,因为mysql似乎能够在一个非常简单的s

我的spring应用程序的页面渲染需要5毫秒,使用ab,我每秒收到大约200个请求

我在一个单一内核的虚拟机上进行了测试

现在,这个页面只需获取一个xml文件并解析它,初始化一个对象,然后将该对象插入mysql

现在假设mysql没有阻塞(连接池不够大或表锁),添加另一个内核应该使我每秒的请求数增加一倍,对吗

如果我在一个线程命中tomcat的情况下每秒收到200个请求,我应该在增加线程的同时继续加倍我的rps,对吗?(显然在某一点上)


通常的瓶颈是什么,因为mysql似乎能够在一个非常简单的servlet应用程序上处理每秒3-4K的插入。

从单核更改为双核应该可以如您所期望的那样工作。如果更多的内核和更高的负载投入使用,您可能会面临线程调度对所有线程都不公平的问题

因为在同一时间分配和释放了更多内存,所以垃圾收集可能是一个问题

只要所有请求的处理速度不超过1000毫秒(200*5毫秒)(您应该有大约300毫秒的空闲时间)。你很好。
但由于调度的原因,在每次系统调用时从用户模式更改为内核模式(主要是来自DB的I/O)会增加处理请求所需的额外时间。这可能会导致瓶颈。

假设渲染过程可以同时进行,那么您的rps应该加倍除了在服务器上运行ab之外,还有哪些方法可以查找瓶颈?@code完成从DB代码开始尝试调用典型序列(使用200个客户端)并找出是否缺少索引或查询是否缓慢。之后,让您的客户按照业务逻辑运行。最后,您可能不想使用jMeter()在web层上运行。