我们有一个带有 Java 后端和 Tomcat 前端服务器的 Web 应用程序。Tomcat 之前有一个 Apache。它们都位于一个主机上。后端位于另一台主机上。Web 浏览器使用 Rest 调用与 Apache/Tomcat 通信。客户端应用程序使用大量并行 api 调用。
虽然我们使用高并行 tcp 连接数(~300)对 Apache 进行性能测试,但浏览器无法/非常缓慢地加载客户端 js 应用程序。
我们尝试了很多 prefork/workers/maxclients 设置。但都无济于事。
在我们临时用 Nginx 替换 Apache 后,这个问题立即解决了。Nginx 似乎是一个不错的选择,但在这个环境中 Apache 会更好。有人知道是什么原因造成的吗?
CPU/内存/网络不能成为瓶颈。
有趣的是,jmeter 对很多请求都给出了这样的响应:非 HTTP 响应代码:java.net.SocketTimeoutException 非 HTTP 响应代码:javax.net.ssl.SSLHandshakeException。当然,这种类型的请求有很多 200。
谢谢。
答案1
这是因为架构不同。Nginx 是轻量级异步(非阻塞)代理。Apache 是功能齐全的 Web 服务器。
虽然 apache 需要在每个请求上检查和读取附加文件 (.htaccess),执行所有过滤器和处理程序(重写等),但 nginx 只在客户端和服务器之间传输字节(可选择修改标头)