核心是先用curl验证接口可用性,再用ab模拟并发压测;curl用于快速调试get/post/带header/cookie请求,ab通过-n、-c等参数测吞吐与稳定性,并需配合jvm、tomcat、数据库连接池等java侧配置优化。

Java Web 接口在 Linux 下做压力测试,核心是用 curl 验证单点请求是否正常,再用 ab(Apache Bench) 模拟并发打量。两者配合,先通再压,避免盲目测试。
curl:快速验证接口可用性与基础逻辑
curl 是轻量级调试工具,适合检查接口是否能通、返回是否符合预期、认证是否生效。对 Java 后端(如 Spring Boot)尤其实用:
- GET 请求(无参/带参):
curl "http://localhost:8080/api/user?id=123" - 带 Header 的请求(如 JWT 认证):
curl -H "Authorization: Bearer eyJhb..." http://localhost:8080/api/order - POST JSON 请求:
curl -X POST -H "Content-Type: application/json" -d '{"name":"test","age":25}' http://localhost:8080/api/user - 带 Cookie 登录态测试:
curl -b "JSESSIONID=ABC123" http://localhost:8080/api/profile
注意:Java 应用若启用了 CSRF 或 CORS 限制,curl 默认不携带 Origin 或处理重定向,需加 -L(跟随跳转)或手动构造 header。
ab:模拟并发,测吞吐与稳定性
ab 是简单高效的 HTTP 压测命令,适合快速评估 Java 接口在高并发下的响应能力。它不依赖 Java 环境,只对目标 URL 发起标准 HTTP 请求。
- 基础压测(100 请求,10 并发):
ab -n 100 -c 10 http://localhost:8080/api/hello/(结尾斜杠不能省) - 带 Keep-Alive 复用连接(更贴近真实用户):
ab -k -n 5000 -c 200 http://localhost:8080/api/list - POST 请求(需指定 body 文件和 Content-Type):
ab -n 1000 -c 50 -p data.json -T "application/json" http://localhost:8080/api/save - 超时调大防中断(尤其慢接口):
ab -n 2000 -c 100 -s 60 http://localhost:8080/api/report(-s单次响应超时设为 60 秒)
关键提醒:ab 默认只统计 HTTP 2xx/3xx 为成功;若 Java 接口返回 4xx(如参数校验失败),会被计入“Failed requests”。需要关注 Failed requests 和 Non-2xx responses 数值是否异常升高。
Java 侧配合要点:让压测结果更真实
ab 测的是 HTTP 层表现,但 Java 应用本身的配置会极大影响结果:
- 确认 JVM 参数合理(如堆内存不频繁 GC);建议用
-Xms2g -Xmx2g避免动态扩容抖动 - Spring Boot 内置 Tomcat 连接数默认仅 200,压测前需调高:
server.tomcat.max-connections=2000server.tomcat.max-threads=500 - 关闭开发模式下自动刷新(
spring.devtools.restart.enabled=false),防止热重载干扰 - 数据库连接池(如 HikariCP)最小空闲连接数建议 ≥ ab 并发数,避免线程阻塞在获取连接上
常见问题与绕过技巧
实际压测中容易卡在几个地方:
-
“socket: Too many open files”:Linux 默认文件句柄太小,运行
ulimit -n 65536临时提升,或写入/etc/security/limits.conf - ab 报 “apr_socket_recv: Connection reset by peer”:通常是服务端主动断连(如 Tomcat 超时关闭、Nginx proxy_read_timeout 过短),查服务端日志
-
POST 请求返回 400 或 415:检查
-T类型是否匹配接口要求(如application/jsonvsapplication/x-www-form-urlencoded),-p文件内容是否合法 JSON 或表单格式 -
想测登录态持续场景:ab 本身不维护 session,可用
-C手动传 Cookie,或先用 curl 登录拿到 JSESSIONID,再注入到 ab 命令中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











