tomcat
像kyj项目请求直接对接 tomcat,tomcat的连接池就会直接影响“并发用户数”
如果这种情况下做性能测试的时候,并发用户数不能满足要求,可以适当加大线程池的配置。
如:项目性能测试发现项目所在机器,资源利用率不高,系统的整体负载不高。-------服务器的资源没有得到足够利用。
适当调大线程池的大小,也要去调整堆栈大小,两个一起搭配,才可能让整个tomcat的性能提升。
nginx
目前企业项目做集群的首选软件,但是不是唯一的软件。
反向代理服务器 vs 代理服务器
代理服务器:自己机器的ip,通过一个代理服务器的ip,转发请求包,到另外一个网络中,代理服务 器,会记录从我们机器上发出的所有请求包信息。
反向代理:网络中一个数据包进来,经过反向代理服务器,分发到内部机器上。
数据分发到内部机器是有策略。策略要说:负载均衡
负载均衡不等于平均分配
安装nginx
- 方法1:用源码包安装------这种方法安装的nginx是可以安装扩展功能,扩展功能主要是可以添加监控
yum install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel -y
# 安装pcre
tar -xzvf pcre-8.44.tar.gz
进入解压后的文件夹
./configure && make && make install
# 下载nginx的包
wget http://nginx.org/download/nginx-1.19.5.tar.gz
解压,进入解压后的文件夹
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --withhttp_ssl_module
make && make install
此时,nginx安装的路径 /usr/local/nginx
启动文件: /usr/local/nginx/sbin/nginx
配置文件: /usr/local/nginx/conf/nginx.conf
检查命令: /usr/local/nginx/sbin/nginx -t
重新加载配置命令:/usr/local/nginx/sbin/nginx -s reload
停止nginx: /usr/local/nginx/sbin/nginx -s stop
- 方法2:编译包安装------这种方法安装很简单,但是不能安装扩展功能
- 方法3:dcoker方式安装
这三种方式,配置文件的路径可能都不相同。但是要记住第1种安装方式的配置文件路径。
这个配置文件,就是用于配置nginx集群和反向代理策略的文件。
集群
集群:是相同服务能力输出的服务集合在一起,提供更强能力输出。
相同的服务数量应该在2个以上
nginx配置
nginx+tomcat负载均衡
记录tomcat机器的ip和端口(如果在同一台服务器上记得修改tomcat服务的ip和端口,不然无法启动tomcat服务)
策略:静态策略和动态策略
静态策略:如轮询
动态策略:如iphash
静态策略和动态策略,没有说那种就好或坏,根据业务的实际情况,哪种最合理,相对而言这种就是最 好的。
如果有一个集群,现在要你对这个集群做性能测试,怎么做?
如:kyj的项目,配置了nginx就可以通过ip直接访问项目, kyj的集群是由2个服务构成 如果你自己使用 ip不带端口,这个时候测试的性能,就是2个kyj项目的整体集群的性能。如果我只想测某一个,我可以调整集群的策略
nginx实战
nginx的监控 可以参考这里
nginx的安装必须是源码包安装方式,不能使用rmp包安装方式
安装nginx-module-vts
下载: git clone https://gitee.com/mirrors/nginx-module-vts.git
下载是放在 /opt路径下
进入nginx的解压文件夹
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --withhttp_ssl_module --add-module=/opt/nginx-module-vts/
make && make install
安装 nginx-vts-exporter 默认端口是 9913
wget https://github.com/hnlq715/nginx-vtsexporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
解压
进入解压后的文件夹
nohup ./nginx-vts-exporter -nginx.scrape_uri=http://localhost/status/format/json
&
此时把项目和nginx都启动了,但是访问http://ip:9913,可以正常访问页面,但是页面没有数据。
因为nginx.conf 的配置文件没有修改
http{
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;
server{
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}
我们搭建监控平台,是把grafana+Prometheus放在同一台机器上,这两个都不要放到被测服务器上
Prometheus数据库,与xxx_exporter所在的机器,网络一定要通。 在Prometheus的机器上,执行
telnet xxexporterIp port
引入模板id:2949
数据基本相同就说明负载均衡一般没有问题。
nginx一般不会成为性能瓶颈,但也不是说,就不会有性能问题。
如果在做性能测试时发现多个接口在某一并发用户数的时候会出错(一小部分)。-----比较明显告诉你
应该是入口地方有性能问题,这个入口很多时候就是nginx。 这种问题大概率就是nginx配置的连 接数不够。