java - 多核对5ms处理页面的影响

标签 java multithreading spring tomcat scalability

我的 spring 应用程序的页面需要 5 毫秒来呈现,并且使用 ab 我每秒收到大约 200 个请求。

我在单核虚拟机上进行了测试。

现在这个页面只是简单地获取一个xml文件并解析它并初始化一个对象,然后将该对象插入到mysql中。

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

如果我每秒收到 200 个请求,单个线程访问 tomcat,我应该在增加线程时继续加倍我的 rps,对吗? (显然在某些时候)。

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

最佳答案

从单核更改为双核应该会如您所愿。如果更多内核和更高负载发挥作用,您可能会面临线程调度对所有线程都不公平的问题。

由于同时分配和释放了更多内存,因此垃圾收集可能会成为一个问题。

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

关于java - 多核对5ms处理页面的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539172/

相关文章:

java - 将三个表内连接到 java DTO

java - Crawler4j - 许多 URL 被丢弃/未处理(输出中丢失)

java - 具有并行线程的 TestNG Selenium

java - 如何从 jackson 的自定义反序列化器中调用默认反序列化器

Spring Cloud 配置允许在 Spring Boot 中覆盖

java - 如何找到跳棋的起始和结束棋子?

java - 字符串拆分和比较 - 最快的方法

c# - 如何在 C# 中重新启动 System.Threading.Tasks.Task

c++ - std::mutex 如何在不同的线程中解锁?

java - Spring Boot 中的 JPA native 查询中未设置参数