nginx压测记录

nginx压测记录

  • 1 概述
  • 2 原理
  • 3 环境
    • 3.1 设备与部署
    • 3.2 nginx配置/服务器配置
  • 4 netty服务
  • 5 步骤
  • 6 结果
  • 7 写在最后

1 概述

都说nginx的负载均衡能力很强,最近出于好奇对nginx的实际并发能力进行了简单的测试,主要测试了TCP/IP层的长链接负载均衡

2 原理

准备netty服务器与客户端,netty-client每秒向netty-server发送1条数据,netty-server接收各netty-client的数据,检查数据序号的连续性从而检查是否丢包,然后将数据发到内存,再由各数据存储线程将数据存储到本地磁盘,通过数据检查程序也可以检查并提取单个客户端的所有数据,通过随机抽样检查单个客户端发送的数据是否正常

3 环境

3.1 设备与部署

设备操作系统部署服务
服务器1centos7nginx
服务器2centos7netty-server
服务器3centos7netty-server
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)
PC1win10/7netty-client(10000个)

3.2 nginx配置/服务器配置

  • 若nginx报错accept() failed (24: Too many open files),基本是应为系统对同时打开的文件数做了限制,需要对系统以及nginx都进行配置

系统配置:


查看当前用户可同时打开的文件句柄数

ulimit -n

通过命令进行设置(这样设置服务器重启会失效,但可以在/etc/profile文件追加ulimit -n 65535,只针对当前用户有效)

ulimit -n 65535

通过修改系统配置文件进行设置

修改/etc/security/limits.conf文件,追加如下内容
在这里插入图片描述
*代表所有用户,如果想代表某个用户的话,则user soft nofile 65535
soft代表软连接 hard代表硬限制

具体可以参考这篇文章: http://t.csdn.cn/MKZkR

nginx配置


worker_processes 指令控制工作进程数,其默认值为1,这意味着NGINX只运行一个worker。 该值应根据可用内核数,磁盘,网络子系统,服务器负载等更改为最佳值。一般设置为可用的(cpu)核心数。或者,可以将其设置为auto。 这样nginx会自动根据核心数为生成对应数量的worker进程。
worker_rlimit_nofile 同时连接的数量受限于系统上可用的文件描述符的数量,因为每个套接字将打开一个文件描述符。 如果NGINX尝试打开比可用文件描述符更多的套接字,会发现error.log中出现Too many opened files的信息。
worker_connections 该指令设置单个worker进程最大打开的连接数

配置例子内容如下:
在这里插入图片描述
其中worker_rlimit_nofile = worker_processes*worker_connections,worker_rlimit_nofile受限于系统的文件句柄数

  • 若nginx报错no live upstreams while connecting to upstream
    //后续补充///

  • 一般情况下nginx配置对优化比较有作用的为一下几项:

1worker_processesnginx进程数,建议按照cpu 数目来指定,一般为它的倍数
2worker_cpu_affinity为每个进程分配cpu,或者将一个进程分配到多个cpu
3worker_rlimit_nofile这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是系统最多打开文件数
4worker_rlimit_nofile这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是系统最多打开文件数
5use epoll使用epoll 的I/O 模型
6worker_connections每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。
7keepalive_timeout超时时间
8client_header_buffer_size客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE 取得。
9open_file_cache这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
10open_file_cache_valid这个是指多长时间检查一次缓存的有效信息
11open_file_cache_min_usesopen_file_cache 指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除
  • 内核参数优化
1net.ipv4.tcp_max_tw_bucketstimewait 的数量,默认是180000
2net.ipv4.ip_local_port_range允许系统打开的端口范围。
3net.ipv4.tcp_tw_recycle启用timewait 快速回收
4net.ipv4.tcp_tw_reuse开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接。
5net.ipv4.tcp_syncookies开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
6net.core.somaxconnweb 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
7net.core.netdev_max_backlog每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
8net.ipv4.tcp_max_orphans系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
9net.ipv4.tcp_max_syn_backlog记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M 内存的系统而言,缺省值是1024,小内存的系统则是128。
10net.ipv4.tcp_timestamps时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
11net.ipv4.tcp_synack_retries为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
12net.ipv4.tcp_syn_retries在内核放弃建立连接之前发送SYN 包的数量。
13net.ipv4.tcp_fin_timeout如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。
14net.ipv4.tcp_keepalive_time当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。

4 netty服务

https://github.com/Abstract-Class/netty-test

  • netty-server
    代码放到了GitHub
  • netty-client
    代码放到了GitHub

5 步骤

  • 部署nginx服务并配置反向代理
  • 部署netty-server
  • 逐个开启netty-client
  • 逐个关闭netty-client
  • 查看客户端数据连续性统计结果
  • 通过数据检查程序抽样检查单个netty-client数据的正确性

6 结果

  • 使用两台服务器
连接数服务器具体的状态数据情况
60000服务器正常数据自检正常,抽样检查正常
70000nginx报错no live upstreams while connecting to upstream数据自检正常,数据抽样检查正常
  • 使用单台服务器
    /后续完善//

7 写在最后

笔者水平有限,结果仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21967.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5区域检测+声音警报

YOLOv5区域检测声音警报 1. 相关配置2. 检测区域设置3. 画检测区域线(不想显示也可以不画)4. 报警模块5. 代码修改5.1 主代码5.2 细节修改(可忽略) 6. 实验效果 本篇博文工程源码下载 链接1:https://github.com/up-up-…

远程桌面连接工具在哪里下载?

在市场上,有很多种不同的工具可用。一些远程桌面连接工具(如RayLink)具有高清流畅、操作简单和连接速度快的特点。而其他一些连接工具则更注重保护安全和数据保密性。不同的远程桌面连接工具各有特点,需要根据不同的需求进行选择。…

[AI图片生成]自己搭建StableDiffusion安装过程

前言 最近尝试玩玩AI图片生成,安装一路坑 出个一路安装成功的记录 开始 找个空间大的盘符,这玩意将来会很占空间.一个模型大约5g左右,你可能还会装很多模型创建个目录,路径不要有中文安装git 下载地址 详细教程 (如果有忽略)下载 Python3.10.0,记得勾选添加到环境变量选项,安…

ChatGPT帮你写简历找工作

随着随着毕业时间的到来,应届生将要面临求职问题,根据官方的统计,2023届高校毕业生预计达1158万人,就业市场竞争激烈,无论是校园招聘,招聘会,线上招聘除了自身的准备和个人能力,都会…

2023 hnust 大三下 人工智能导论课程 期中考试复习笔记

前言 ★大概率考✦个人推测考点※补充内容没有完全覆盖“人工智能导论复习2023.pdf”的重点致谢:hwl、lyf、lqx 题型 问答:5*10分综合:15分设计:25分开放题/论述题:10分 第1章 绪论 人工智能的定义 智能 思考与…

Android平台外部编码数据(H264/H265/AAC/PCMA/PCMU)实时预览播放技术实现

开发背景 好多开发者可能疑惑,外部数据实时预览播放,到底有什么用? 是的,一般场景是用不到的,我们在开发这块前几年已经开发了非常稳定的RTMP、RTSP直播播放模块,不过也遇到这样的场景,部分设…

MySQL和Redis如何保证数据一致性?

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用,在读取缓存这方面基本都是一致的,大概都是按照下图的流程进行操作: 但是在更新缓存方面,是更新完数据库再更新缓存还是直接删除缓存呢?又或者是先删除缓存再…

ATTCK v13版本战术介绍——防御规避(六)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第31-36种子技术,后续会介绍防御规避其他子技术&#xf…

Revit幕墙:这些命令在幕墙嵌板中的妙用及快速幕墙

一、Revit中这些命令在幕墙嵌板中的妙用 在我们做幕墙时,通常会有不同种类的幕墙,比如材质不同,颜色不同。这时我们就需要去选中嵌板进行替换新样式的嵌板。 1.通常我们在替换嵌板时都是通过Tab切换,然后选中嵌板。这样进行来回切…

携手企企通,农业产业化国家重点龙头企业「罗牛山」加速采购数智化建设

导语 与企企通形成战略合作,双方基于供应商、合同管理、采购协同等多方面的应用场景,打造立足海南辐射全国的行业标准化解决方案。行业案例的示范作用,不仅对牛罗山采购业务数字化有指导意义,对整个畜牧养殖行业加入采购供应链管…

AI人工智能预处理数据的方法和技术有哪些?

AI人工智能 预处理数据 在人工智能(Artificial Intelligence,简称AI)领域中,数据预处理是非常重要的一环。它是在将数据输入到模型之前对数据进行处理和清洗的过程。数据预处理可以提高模型的准确性、可靠性和可解释性。 本文将…

阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位测试员发帖称,自己去阿里面试,三面都过了,却被…

IMU和GPS融合定位(ESKF)

说明 1.本文理论部分参考文章https://zhuanlan.zhihu.com/p/152662055和https://blog.csdn.net/brightming/article/details/118057262 ROS下的实践参考https://blog.csdn.net/qinqinxiansheng/article/details/107108475和https://zhuanlan.zhihu.com/p/163038275 理论 坐标…

Python中的自定义函数创建方法和应用举例

Python中的自定义函数创建方法和应用举例 在Python语言中,函数是一组能够完成特定任务的语句模块,可分为内置函数、第三方模块函数和自定义函数。其中,内置函数是Python系统自带的函数;模块函数是NumPy等库中的函数。 1.自定义函…

如何让数据安全管理工作化繁为简?uDSP 十问十答

数据安全管理工作与国家数据安全、企业资产保护以及个人信息保护工作息息相关。复杂、多元、流通的数据也给数据安全带来了更多的威胁和挑战,如数据资产管理、分类分级问题,数据安全集中管控问题,数据共享与流通问题等。原点安全一体化数据安…

开源之夏 2023 | 欢迎报名Rust相关项目

开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区,针对重要开源软件的开发与维护提供项目&#x…

Mongodb Shell 常用操作命令

目录 一、启动与关闭mongodb服务 二、进入shell操作 三、常用shell命令 一、启动与关闭mongodb服务 启动:命令: ./mongod -config ../data/mongodb.conf 关闭命令: ./mongod -config ../data/mongodb.conf -shutdown 二、进入shell操作 命令:./mongo 三、常用shell命令 sh…

企业型OV,增强型EV证书开通审核流程

选购 OV、EV型证书需要是企业用户,申请过程中需要提交企业资料。 选择证书品牌及型号 管理中心补全审核资料 下载“确认函”签字盖章并扫描,再上传。 审核部门联系确认企业信息,(过需要7-10个工作日) 审核通过&…

京东商品详情API调用说明 京东商品库存销量接口

尊敬的开发人员: 感谢您选择使用京东API进行开发。下面为您提供一份简要的API调用说明,帮助您快速上手并实现所需功能。 1.注册京东开放平台账户并创建应用 首先,您需要在 https://o0b.cn/jennif/ 网站上注册一个京东开放平台的账户&#…

【黑马2023大数据实战教程】VMWare虚拟机部署HDFS集群详细过程

文章目录 部署HDFS集群1.配置workers:2.配置hadoop-env.sh文件3.配置core-site.xml文件4.配置hdfs-site.xml文件准备数据目录分发Hadoop文件夹配置环境变量授权为hadoop用户格式化文件系统错误排查方法!! 视频:黑马2023 VMWare虚拟机部署HDFS集群 注意!这…