我在 docker 上使用 nginx 以及 2 个微服务,也在 docker 上,全部都在本地。我正在使用 JMeter 对大量用户进行负载测试。
问题是我在许多请求中收到 502 Bad Gateway 错误(60%-70%)。
从我的角度来看,我认为这是由于 CPU 和内存限制,因为所有本地共享相同的资源,在任务管理器中这些资源为 100%。
nginx.config文件如下:
worker_processes 4;
events {
worker_connections 2048;
}
http {
proxy_connect_timeout 60s;
proxy_read_timeout 30s;
upstream loadbalancer{
server 172.18.0.3:8083;
server 172.18.0.4:8084;
}
server {
listen 8080;
location / {
proxy_pass http://loadbalancer/;
}
}
}
有谁知道这是什么原因吗?我是否认为这是由于 CPU 和内存限制造成的?
谢谢!
根据 HTTP 状态 502 描述:
超文本传输协议 (HTTP) 502 Bad Gateway 服务器错误响应代码表示服务器在充当网关或代理时收到 来自上游服务器的无效响应。
因此,这意味着您的微服务中至少有一个未能向 Nginx 提供正确的响应。
因此,您需要通过分析微服务日志、分析其代码等来确定失败的根本原因。
一般来说,在与被测系统相同的机器上运行负载生成器并不是最好的主意,因为被测系统和 JMeter 都可能是资源密集型的,并且会“争夺”内存、CPU 和网络。所以你不会得到好的结果。此外,结果无法推断,因为它们不是线性扩展的,因此您不能说如果您的系统在 4GB RAM 上支持 100 000 个用户,那么它在 8GB RAM 上将支持 200 000 个用户。您需要在生产环境中测试系统的性能,或者在硬件、软件、数据量等方面尽可能接近生产环境。
一旦获得一些结果,您可以在缩小规模的环境中重复较小的测试,并将其用作回归测试的基线,但初始压力测试应在类似产品的环境中完成。
有关此主题和其他重要主题的更多信息:负载测试最佳实践