VPS 上的 Apache 与 Tomcat 负载测试


出版日期:

更新:


技术文章 > VPS 上的 Apache 与 Tomcat 负载测试

2026 状态和安全使用

结论:在 Apache 到 Tomcat 堆栈中,第一个限制可以是客户端、代理工作线程、连接器线程、JVM 堆或垃圾收集、应用程序代码、数据库或 VPS 本身。如果没有延迟、错误和资源证据,单个并发数无法识别容量。

你将学到什么

  • 原始两层 VPS 实验测量的结果。
  • 代理和 Tomcat 连接器如何限制与应用响应时间的交互。
  • 现代测试中要记录的内容:百分位数、吞吐量、故障、CPU、内存、GC、线程和下游饱和度。

这适用于谁:Java Web 团队学习如何设计小型、基于证据的能力测试。

截至 2026 年的适用情况:以下结果属于作者的原始测试,并未在本次编辑更新中转载。将它们视为案例研究,而不是验证当前性能或 VPS 购买建议。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

这项历史测试记录了作者环境中 Apache 与 Tomcat 组合处理并发请求的情况。结果仅作为案例,不应直接用于当前 VPS 容量规划。

这一次,在WEB/AP服务器(Apache和Tomcat)上进行了测量,但请参考下面的文章,只对WEB(Apache)进行测量。

小型 VPS 上的 Apache 负载测试

目录

  1. 测量
  2. 测量结果的细节
  3. 摘要

1. 测量

1-1. 测量环境

以下是将进行测量的环境。

■租赁服务器信息

CPU2core
memory1GB
SSD50GB

■服务器信息

OSCentOS 7.4 64bit
网络服务器Apache HTTP Server 2.4.41
AP服务器Apache Tomcat 9.0.27
DB服务器PostgreSQL 10.2
JavaOpenJDK 11

1-2. 测量方法

测试使用基于 Java 的负载测试工具 JMeter,逐步增加并发请求,直到服务器无法继续满足处理要求。

具体条件包括。

  • 要求间隔时间:5秒。
  • 同时请求的数量:10例。(测量结果逐渐增加,每次10例。)
  • 测量时间:60秒。

测量时间为 "60秒",请求间隔为 "5秒",所以你要重复访问系统12次(60÷5)。

1-3. 测量结果

下面先给出结果;这些数据仅适用于文中所述测试环境。

CPU:2core
memory:1GB
SSD:50GB
最多可以同时处理80个请求

这一测量的结果显示了上述情况。 上述结果表明,可以推断出以下几点。 在选择服务器规格时,尽量将此作为一个标准。

CPU:1core
memory:512MB
SSD:25GB
最多可以同时处理20个请求。
CPU:2core
memory:1GB
SSD:50GB
最多可以同时处理80个请求
CPU:3core
memory:2GB
SSD:100GB
最多可以同时处理200个请求。

在这次特定的 Apache/Tomcat 基准中,“CPU:1 核、内存:512 MB、SSD:25 GB”的环境完成了测试负载。 结果不能直接证明生产环境可支持 20 名并发或注册用户。

2. 测量结果的细节

下面记录测试条件和结果,便于理解这些数字的适用范围。

2-1. WEB/AP服务器(Apache,Tomcat)测量

该请求是在用户从登录屏幕登录的情况下抛出的,在登录后,显示的是列表屏幕。 顺便说一下,这个屏幕是用Spring框架构建的,包括认证功能。

测量结果显示如下。

  • 对于10个同时的请求⇒OK
  • 对于20个同时请求⇒OK
  • 对于30个同时请求⇒OK
  • 对于40个同时请求⇒OK
  • 对于50个同时请求⇒OK
  • 对于60个同时请求⇒OK
  • 对于70个同时请求⇒OK
  • 对于80个同时的请求⇒OK
  • 对于90个同时请求⇒NG

在第90个案例中发生了错误。 其原因是与Apache的连接错误。 这时服务器的状态如下。

  • CPU利用率:26%
  • 内存利用率:100%

完全缺乏内存是瓶颈所在。

对于稍微有点怪癖的人来说,Apache多处理模块(MPM)的配置如下。 MPM被简单地解释为允许Apache并行处理多少的设置。

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

值得关注的设置是 "MaxRequestWorkers "的 "250"。 这是对Apache可以同时处理的最大案件数的一个设置。 '250',因此可以最大限度地并行处理250个案例,但看一下内存的使用情况,每个案例大约使用8MB的内存。

Java似乎使用了320MB的内存(248M的堆和72M的元空间),Apache使用了640MB的内存(8M x 80个进程),尽管Apache的MPM设置值是'250',但它似乎不能创建超过'80'个进程。
注意:服务器有1G的内存,所以Apache和Java的总内存是960MB,几乎达到了上限。

在这次测试中,先观察到 Apache 侧达到限制;这只说明该配置和工作负载下的瓶颈,不能推广到其他环境。

当Apache和Tomcat安装并运行时,我们发现在规格为 "CPU:2核,内存:1GB,SSD:50GB "的情况下,同时访问的数量 "80 "是极限。(假设Java的内存设置为:堆248M,元空间72M。)

2-2. 考虑

从这里开始,就成为一个考虑因素,但由于内存是瓶颈,如果改变内存,可以并发处理的进程数量将增加。

【在场。(memory1GB)】

  • memory:1GB
  • 阿帕奇线程的数量:80例。
  • Apache中每个线程的内存消耗。:8MB
  • 阿帕奇的内存消耗:640MB(80例。×8MB)
  • Tomcat的内存消耗:320MB(2.48亿用于HEAP。、72米为元空间。)
  • Apache+Tomcat的内存消耗:960MB

【变化后(memory2GB)】

  • memory:2GB
  • 阿帕奇线程的数量:200例
  • Apache中每个线程的内存消耗。:8MB
  • 阿帕奇的内存消耗:1600MB(200例×8MB)
  • Tomcat的内存消耗:320MB(2.48亿用于HEAP。、72米为元空间。)
  • Apache+Tomcat的内存消耗:1920MB

有了2GB的内存,就有可能同时处理200个案件。 如果内存增加到3GB,似乎可以做更多的并发处理,但Apache的MPM的 "MaxRequestWorkers(可并发处理的最大案件数)"是 "250",所以如果内存进一步增加,也需要对这里进行调整。 可能还需要对Java内存进行调整。 反之,如果内存减半,则会出现如下情况。

【变化后(memory512GB)】

  • memory:512GB
  • 阿帕奇线程的数量:20例
  • Apache中每个线程的内存消耗。:8MB
  • 阿帕奇的内存消耗:160MB(20例×8MB)
  • Tomcat的内存消耗:320MB(2.48亿用于HEAP。、72米为元空间。)
  • Apache+Tomcat的内存消耗:480MB

3. 摘要

本文记录了 Apache 与 Tomcat 在指定条件下的并发请求测试。容量规划还应加入真实业务逻辑、数据库、TLS、峰值流量和可接受延迟等因素,不能由这一次测量推算固定用户数。

该调查是基于这样的假设:没有其他软件在以边缘性能运行。 建议选择一个有点回旋余地的规格,因为它是一个边际值。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。