在 Ubuntu 上给 JSP 应用做性能测试,难点通常不在“能不能跑起来”,而在“怎么选工具、怎么把压测过程做规范、怎么根据结果判断问题出在哪一层”。下面按实际工作流程展开:先看工具选择,再用 Apache JMeter 走一遍完整测试步骤,最后把页面、服务端和基础设施的优化抓手整理出来,方便你从数据走到调优结论。
常用性能测试工具怎么选
Ubuntu 环境下做 JSP 应用压测,主流工具通常集中在这三类。它们都能完成并发访问模拟,但侧重点并不一样,选型时最好直接对应你的测试目标。

Apache JMeter:通用型首选
Apache JMeter 是最常见的开源性能测试工具,支持 HTTP/HTTPS、数据库、FTP 等多种协议,资料多、社区成熟,适合大多数 JSP 页面或 Web 应用接口的压力测试场景。对需要快速搭建测试计划、观察响应时间和吞吐量的团队来说,它通常是最省成本的选择。
Locust:适合复杂业务流程
Locust 基于 Python,用代码定义压测场景。如果测试里涉及登录态、动态参数、跨页面业务流程,或者你希望把测试逻辑写成可维护脚本,它会比纯图形化工具更灵活。

Gatling:偏向高并发场景
Gatling 基于 Scala,采用异步非阻塞 I/O,在高并发场景下资源利用率更好。它的报告图表也比较清晰,适合对吞吐表现和趋势分析要求更高的场景。
如果你的目标是先把 JSP 页面压测流程跑通,并尽快得到可解释的指标,JMeter 仍然是最稳妥的起点。下面就以它为例展开。
在 Ubuntu 上安装并配置 JMeter
下载安装
以 5.4.1 版本为例,可以直接在终端下载、解压并移动到统一目录:
wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.1.tgz
tar -xzf apache-jmeter-5.4.1.tgz
sudo mv apache-jmeter-5.4.1 /usr/local/jmeter
配置环境变量
为了后续能直接在命令行调用 jmeter,需要把路径写入 ~/.bashrc:
echo "export JMETER_HOME=/usr/local/jmeter" >> ~/.bashrc
echo "export PATH=$JMETER_HOME/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
验证是否安装成功
执行下面的命令检查版本输出:
jmeter -v
如果终端能正常显示版本号,说明 JMeter 已经可以使用。对于后续批量压测,优先使用命令行模式会更接近实际测试习惯,也能减少 GUI 自身带来的资源消耗。
JMeter 测试计划怎么搭
启动并创建线程组
先在终端运行:
jmeter
打开图形界面后,在“测试计划”上右键,依次选择“添加”→“Threads(用户)”→“线程组”。这里的几个关键参数,直接决定了压测强度:
- 线程数:例如设置为
100,表示模拟 100 个并发用户。 - Ramp-Up Period:例如
10秒,表示 10 秒内把这些线程全部启动完。 - 循环次数:例如
10次,用于控制每个用户重复访问的次数。
配置 HTTP 请求
在线程组上右键,选择“添加”→“Sampler”→“HTTP请求”,再填写目标信息:
- 服务器名称:如
localhost - 端口:如
8080 - 路径:如
/your-app/your-page.jsp
如果你的 JSP 页面依赖参数、Cookie 或登录态,后续还可以继续补充请求头、参数化数据或会话管理组件,但基础页面压测先从单请求模型开始更容易定位问题。
添加监听器观察结果
在线程组上右键,选择“添加”→“Listener”,常用的有两类:
- 聚合报告:适合看总体响应时间、吞吐量、错误率。
- 查看结果树:适合调试单个请求是否发送正确、返回内容是否异常。
调试阶段可以保留“查看结果树”,正式压测时则应减少不必要的监听器,避免本机额外负担影响结果。
如何运行测试并读懂结果
保存测试计划
先把测试计划保存为一个可复用文件,例如:
jsp_performance_test.jmx
使用非 GUI 模式执行
正式执行建议使用命令行模式:
jmeter -n -t jsp_performance_test.jmx -l results.jtl
这里 -n 表示非 GUI 模式,-t 指定测试计划文件,-l 指定结果输出文件。这样的执行方式更适合持续集成,也更适合中高并发测试。
重点关注哪些指标
测试完成后,可以回到“聚合报告”看核心结果,至少先盯住下面三项:
- 平均响应时间:越短越好,通常建议控制在
2秒以内。 - 吞吐量:表示系统每秒可处理的请求数,例如
100 req/s。 - 错误率:理想情况应为
0,只要出现错误,就需要先排查请求失败、超时、应用异常还是数据库瓶颈。
这三个指标的组合比单看一个数值更有意义。比如响应时间高但错误率为 0,常见于数据库慢查询或页面渲染过重;吞吐量上不去且 CPU 打满,则可能是应用层或 SQL 层已经成为限制因素。
拿到压测结果后,优先从哪些方向优化
JSP 页面层优化
- 减少 JSP 中的 Java 代码,把业务逻辑放到 Servlet 或 Service 层,不要在页面里堆
<% ... %>。 - 优先使用 JSTL 和 EL 表达式,例如用
${user.name}代替<%= user.getName() %>,页面结构更清晰,处理效率也更好。 - 启用 JSP 缓存或减少不必要的页面开销,可以在
web.xml里配置<jsp-config>,也可以结合页面指令,例如<%@ page isThreadSafe="true" %>、<%@ page session="false" %>。
服务器与应用层优化
- 优化数据库查询:加索引、避免
SELECT *、减少 N+1 查询,用EXPLAIN检查 SQL 执行计划。很多 JSP 页面慢,根因其实不在 JSP,而在数据库。 - 使用连接池:如 HikariCP、DBCP,并在
context.xml中完成配置,减少数据库连接反复创建和销毁的成本。 - 启用压缩:在 Tomcat 的
server.xml中配置压缩,减小网络传输体积:
<Connector compression="on" compressableMimeType="text/html,text/xml,text/css,application/javascript" />
基础设施层优化
- 把图片、CSS、JS 等静态资源放到 CDN,先降低页面加载链路中的静态资源压力。
- 使用 Nginx 或 HAProxy 做负载均衡,把请求分发到多个 Tomcat 实例,提升整体吞吐能力。
- 进一步做集群部署,让多台服务器共同承载同一套应用,提高可用性和扩展能力。
例如 Nginx 可以这样定义上游 Tomcat:

upstream tomcat_servers { server 192.168.1.1:8080; server 192.168.1.2:8080; }
优化时建议按“数据库与应用逻辑优先,页面和传输优化其次,基础设施扩容最后”的顺序推进。先修低效查询和线程等待,往往比单纯加机器更有效。
测试环境和监控别忽略
尽量保持环境一致
性能测试最怕环境失真。服务器配置、JDK 版本、应用服务器版本如果与生产环境差异太大,压测结果很容易失去参考价值。至少要保证 CPU、内存、磁盘条件,以及 Tomcat、JDK 版本尽量接近生产。
测试时同步观察系统资源
压测过程中,建议同时打开系统监控命令,配合 JMeter 指标一起分析:
top
free -m
df -h
top:看 CPU 使用情况。free -m:看内存是否紧张。df -h:看磁盘空间是否异常。
如果 CPU 持续飙高,往往要检查 SQL、JSP 渲染或线程竞争;如果内存吃紧,则要排查缓存配置、对象堆积或连接泄漏问题。
把性能测试纳入持续集成
如果项目迭代频繁,可以把性能测试脚本接入 Jenkins 等 CI/CD 工具。每次代码提交后自动跑一轮基线测试,有助于尽早发现性能退化,而不是等上线后再靠用户反馈定位问题。
对于 JSP 应用来说,性能测试不是单次动作,而是一套持续验证机制。只有把测试流程、指标判断和优化动作串起来,压测结果才真正能服务于上线质量和容量规划。













