服务器问答

为什么用 Nginx 做了负载均衡之后 QPS 还不如直接压测 Tomcat?
0
2021-05-19 22:18:52
idczone
Tomcat 负责收 POST 请求并写单机的 Redis,两个 Tomcat 前面挂了一个 Nginx 做转发,配置都是 6 核 4G 内存独立机美国服务器器,和压测机都在一个局域网内,用 Jmeter 直接压测 Tomcat 能跑到 8000QPS,压测 Nginx 只有 5000 多,我该怎么做?
这是肯定的, 挂个 nginx 中间多了一层转发消耗, 挂 nginx 是为了其他的功能,比如多实例水平扩展, 负载均衡, 做统一的权限认证等.

nginx 是为了多台同职责机器对外统一服务入口,多台机器做负载均衡,不是提高单机性能

可是 Nginx 不是说轻松达到几万 QPS 吗?那压测 Nginx 的话不应该是接近 Tomcat 的 QPS*2 吗?

等等,楼主意思是负载均衡后 2 台才 5000,不如一台的 8000 ?

我挂 Nginx 就是为了给后面多个 Tomcat 做负载均衡啊....性能反而还下降了

关注下 Nginx 机器的网卡使用情况,压测时候是不是占满了带宽

带宽应该没啥问题,内网千兆互联,看 Jmeter 最大发送速度才 2.5MB/s,Nginx 机器的 CPU 也没有跑满,压测机是 i9 9900K

是不是都只转发到一边去了。。

jmeter 有性能问题
用 wrk 压吧

这就太多了要考虑的了,改下 nginx 线程数,连接数配置?

贴下 nginx 配置?

线程和连接数一般多少合适?我改成和 ulimit 一样的 65535 了

只转到一边也不会比直接压测 Tomcat 性能还低吧....

6 核的 i5 8500,6 个 worker 进程

额 我意思是配置文件..

看 nginx log 看 tomcat log

一般情况下不会的。。大概率是 NGINX 配置问题或者 NGINX 那台机器的内核参数配置问题。

可能是 nginx 配置的问题,是否是长连接、upstream 连接池是否足够大、网络问题等等

我盲猜可能是 nginx 相关配置的问题

盲猜两个 tomcat 在一个机器上

盲猜两个 tomcat 在一个机器上 +1

有可能是你 Jmeter 压测的时候线程数固定而且顺序发请求。
由于多路过一台机器请求完成时间增加了 60%,比如说 1ms 变成了 1.6ms 。
qps 自然就变成了原来的 5/8。

盲猜两个 tomcat 在一个机器上 +2

盲猜两个 tomcat 在一个机器上 +3

你有几台机器?

盲猜 Tomcat 在一个机器上你们是真没看吧...

nginx.conf:
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
on;
}
http {
upstream tomcat{
server 192.168.50.166:8080;
server 192.168.50.99:8080;
keepalive 20480;
}
server{
listen 8080;
location / {
proxy_pass http://tomcat;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
types_hash_max_size 2048;
server_tokens off;
client_header_buffer_size 4k;
client_max_body_size 10m;
server_names_hash_bucket_size 64;
server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
/> SSL Settings
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
/> Logging Settings
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

预期能有 16000qps 现在只有 5000 的话,可以试试线程数*3 再压

worker_connections 和 keepalive 不是越高越好
看看连接的状态

如果没有硬件瓶颈问题
基本是 nginx 没配好
我的低配机器 nginx 做入口,都能上万 QPS

楼主你的 192.168.50.166 和 192.168.50.99 这两台机器和 nginx 所在服务器之间的网络是什么网络? 网络延迟可能是一个比较大的因素,如果中间有路由器 /交换机,可能也得查查负载和延迟

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服