性能测试-Nginx
一、Nginx测试
1、负载均衡
轮询机制(默认)
雨露均沾,两个请求 --> 后端两台服务器, 每台服务器负责处理一个请求
权重weight 参数是权重,示例中的意思说明:如果nginx收到4个请求,其中3个请求交割192.168.1.110这台机器进行处理。
upstream myapp1 {server 192.168.1.110:5000 weight=3;
server 192.168.1.109:5000;
}
ip_hash机制
同样的客户端ip,多次请求分配给同一台服务器
upstream myapp1 {ip_hash;
server 192.168.1.110:5000;
server 192.168.1
2、测试
2.1 集群有效性测试(功能测试)——负载均衡是否生效,是否按策略将讲求分配到不同服务器
方式一:应用日志分析
此种方式要求后端开发针对请求有记录日志
看后端应用系统 有没有对应的处理记录
方式二:服务器网络监控
通过网络抓包分析请求
tcpdump 抓包
centos安装: yum install tcpdump
tcpdump -i any
所有网卡中捕获数据包
tcpdump -i eth0
指定网卡中捕获数据包
tcpdump src 192.168.174.2
指定IP来源
tcpdump port 5000
指定端口
2.2 集群容错测试(功能测试)
集群节点出现故障,无法提供正常服务(停掉某个服务,看其他服务是否正常处理请求)
检查 整个集群是否有问题【错误率】
2.3 拓展性测试(性能测试)
模拟生产场景: 9月份 我们针对 双11 高峰期做性能测试,计算需要多少服务器生产环境的机器配置资源配置,要根据实际情况去增减
生产环境 动态增加机器
不做其他的系统优化,只是模拟机器增加,检查是否带来性能提升.109:5000;
二、Nginx 瓶颈分析
1、资源占用:CPU、内容、网络、磁盘
2、请求是否堆积
active:活跃的连接 总数
read:nginx 接受这个请求读取 用户请求信息
wait:nginx 转发请求给后端应用服务器等待具体的业务结果,大量wait ,后端可能处理太慢了
write:nginx已经拿到请求结果回复给客户端,nginx 写响应内容太慢关系:active=reading + writing + waiting
在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的。如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中????
三、调优方向
1、Nginx 工作进程数量
Nginx工作进程数
nginx 开启多个进程:和内存打交道,没有负责业务,请求处理很快,所以采用的是多进程
java 和mysql 是开启多线程:因为处理过程中有大量等待时间(和磁盘打交道),线程消耗资源少,所以选择了线程
进程数量:work_processs CPU内核数;
Nginx运行CPU绑定
worker_cpu_affinity 0001 0010 0100 1000
CPU 执行代码: 4个线程 任务代码指令 都交给一个CPU去运行Nginx最大打开文件数
操作系统层面: 文件操作、网络操作、进程 --- 文件描述符
worker_rlimit_nofile 65535;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致,如果配置过低,nginx 无法跑满效率
注:文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。
Nginx事件处理模型
events {use epoll;
worker_connections 65535;
multi_accept on;
}
work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections。
实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!
multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数后端请求连接断开连接超时时间
nginx 请求后端,如果迟迟得不到响应, nginx内部堆积大量请求
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
gzip 调优
这个场景: 压缩静态文件,减少网络带宽占用
使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本,所以说这是一个重点
gzip on; #开启压缩功能
gzip_min_length 1k :设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。
expires 缓存调优
1. nginx -- 把文件从 磁盘 加载到内存,缓存起来
还可以作为一个 web 服务器 -- 部署静态的资源{html、图片....}直接返回 文件内容
nginx 不仅仅只能做负载均衡
2. nginx -- 主动在返回客户端的消息体,加上 客户端缓存的标记
缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来, Expires缓存配置在server字段里面
内核参数优化
nginx 调优:nginx调优-腾讯云开发者社区-腾讯云
nginx 监控:运维监控系统PIGOSS BSM 如何实现Nginx监控
nginx 学习:nginx-2-讲解与使用_nginx最大并发连接数-CSDN博客
原文地址:https://blog.csdn.net/yaya1943/article/details/136699042
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!