一个 SpringBoot 项目能处理多少请求?

作者:微信小助手

发布时间:2023-07-27T15:35:52

今天给大家分享一位小伙伴在面试中所遇到的一道面试题:一个 SpringBoot 项目能同时处理多少请求?


不知道小伙伴看到这个问题有没有什么思路呢?


下面是原文内容(文中"我"指原文作者):


我大概知道他要问的是哪个方向,但是对于这种只有一句话的面试题,我的第一反应是:会不会有坑?


所以并不会贸然答题,先追问一些消息,比如:这个项目具体是干什么的?项目大概进行了哪些参数配置?使用的 web 容器是什么?部署的服务器配置如何?有哪些接口?接口响应平均时间大概是多少?


这样,在几个问题的拉扯之后,至少在面试题考察的方向方面能基本和面试官达成了一致。


比如前面的面试问题,经过几次拉扯之后,面试官可能会修改为:


一个 SpringBoot 项目,未进行任何特殊配置,全部采用默认设置,这个项目同一时刻,最多能同时处理多少请求?


能处理多少呢?


我也不知道,但是当问题变成上面这样之后,我找到了探索答案的角度。


既然“未进行任何特殊配置”,那我自己搞个 Demo 出来,压一把不就完事了吗?

坐稳扶好,准备发车。


Demo


小手一抖,先搞个 Demo 出来。


这个 Demo 非常的简单,就是通过 idea 创建一个全新的 SpringBoot 项目就行。

我的 SpringBoot 版本使用的是 2.7.13。


整个项目只有这两个依赖:



整个项目也只有两个类,要得就是一个空空如也,一清二白。



项目中的 TestController,里面只有一个 getTest 方法,用来测试,方法里面接受到请求之后直接 sleep 一小时。


目的就是直接把当前请求线程占着,这样我们才能知道项目中一共有多少个线程可以使用:


@Slf4j@RestControllerpublic class TestController {
@GetMapping("/getTest") public void getTest(int num) throws Exception { log.info("{} 接受到请求:num={}", Thread.currentThread().getName(), num); TimeUnit.HOURS.sleep(1); }}


项目中的 application.properties 文件也是空的:



这样,一个“未进行任何特殊配置”的 SpringBoot 不就有了吗?


基于这个 Demo,前面的面试题就要变成了:我短时间内不断的调用这个 Demo 的 getTest 方法,最多能调用多少次?


问题是不是又变得更加简单了一点?


那么前面这个“短时间内不断的调用”,用代码怎么表示呢?


很简单,就是在循环中不断的进行接口调用就行了。


public class MainTest {    public static void main(String[] args) {        for (int i = 0; i < 1000; i++) {            int finalI = i;            new Thread(() -> {                HttpUtil.get("127.0.0.1:8080/getTest?num=" + finalI);            }).start();        }        //阻塞主线程        Thread.yield();    }}


当然了,这个地方你用一些压测工具,比如 jmeter 啥的,会显得逼格更高,更专业。我这里就偷个懒,直接上代码了。


答案


经过前面的准备工作,Demo 和测试代码都就绪了。


接下来就是先把 Demo 跑起来: