作者:zqb_0125 | 来源:互联网 | 2022-12-29 11:08
【ngin】nginx查看并发连接数的两种方法生产环境中越来越多的项目使用nginx作为反向代理,我们需要关注nginx状态,比如查看nginx当前并发连接数,确保正常运行。
【ngin】nginx 查看并发连接数的两种方法
生产环境中越来越多的项目使用 nginx 作为反向代理,我们需要关注 nginx 状态,比如查看 nginx 当前并发连接数,确保正常运行。 这篇文章分享下查看 nxginx 并发连接数的两种方法。
此方法需要依赖于 nginx 的 http_stub_status_module 模块,可输入 nginx -V 查看是否已经安装此模块,如果没有安装需要重新编译该模块。
在您的任意一个 server 段内,添加如下配置: ########################################## location /status { stub_status on; } ########################################### 配置修改完毕后输入命令:nginx -t 确保语法没有问题,并重载一次 nginx 配置 nginx -s reload,使其生效。 再访问 http://youdomain.com/status 就可以看到连接数状态了,如下截图:注意:状态配置只能是针对某个 nginx 服务,目前 nginx 还无法做到针对单个站点进行监控。参数解释: Active connections:当前 Nginx 正处理的活动连接数(1186),也就是当前的并发连接数 server accepts handled requests:总共处理了420484个连接,成功创建420484次握手,总共处理了408348个请求 Reading:nginx 读取到客户端的 Header 信息数 Writing:nginx 返回给客户端的 Header 信息数 Waiting:开启 keep-alive 的情况下,这个值等于active-(reading+writing),意思就是Nginx已经处理完正在等候下一次请求指令的驻留连接如果您只是想单纯的查看nginx 当前并发连接数,不需要更详细的信息,直接使用下面的命令 (netstat -apn|grep 'nginx: worker'|wc -l) 即可。
Nginx 限制ip并发数及请求速度
nginx中ngx_http_limit_conn_module模块用于限制连接数量,特别是来自单个IP地址的连接数量。并非所有的连接都被计数。
只有当服务器处理了请求并且已经读取了整个请求头时,连接才被计数。
$binary_remote_addr对于IPv4地址,变量的大小始终为4个字节,对于IPv6地址则为16个字节。存储状态在32位平台上始终占用32或64个字节,在64位平台上占用64个字节。一个兆字节的区域可以保持大约32000个32字节的状态或大约16000个64字节的状态。如果区域存储耗尽,服务器会将错误返回 给所有其他请求。
10M可存储160000个状态 nginx中ngx_http_limit_req_module模块用于限制每一个请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。 我们可以用ab工具测试一下。
Nginx限制并发连接数
对于一些服务器流量异常、负载过大,甚至是大流量的恶意攻击访问等,进行并发数的限制(共享内存和并发限制需结合系统定制) limit_conn_zone 设置共享内存区域参数 limit_conn 设置共享内存区域和给定键值的最大允许连接数 limit_conn_log_level 日志可以调整级别,默认 error limit_conn_status 返回状态码响应拒绝请求,默认 503 示例 限制来自单个IP地址的请求处理频率,每秒固定处理请求数,推迟过多请求。
nginx能扛得住5万并发,那更大呢,怎么办
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。
测试结果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
根据经验,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。而这台 Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
在3万并发连接下,访问Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服务器的PHP程序,仍然速度飞快。
如何测试nginx所支持的最大并发数?
1100用户并发时,用户一共响应时间为315秒(即每用户平均响应时间0.005秒),其中最高产生209个失败用户,但成功用户基本上可以完成后续操作,符合现系统要求的最大稳定用户数。由此可得出本系统在新增功能点中支持最大用户并发数为1100。
按照1*100比例,计算得到每小时峰值活动用户数11万/小时;采用80•20原则计算得出本系统支持注册用户数约为165万。
而本系统性能需求大规模支持100万注册用户,由上述的数据我们的系统已达到本系统性能需求。
如何测试nginx所支持的最大并发数
这篇文章解决了很多用户的难题,就是如何通过最大用户并发数来确定系统最大用户数,因为这个问题不解决的话,用户很难挑选到最为适合自身系统的服务器,我们来看看这篇文章。以下是作者原文。
本篇主要是性能方面的。
一个系统的最大并发用户数为1100,怎么能推算出该系统的支持最大用户数。其中用户性能要求如下:支持100万注册用户性能需求分析:1、根据用户的要求,本系统要支持100万用户,其中性能机器配置如何?高峰值是多少?带宽?等2、如果都是采用公司的测试环境,那么本次性能应该做哪几种性能?性能评测、负载测试、强度测试?3、怎么算出并发用户数?响应时间?性能指标确定:因为用户的性能需求太广,没有定到具体的数值。那么我怎么开展后继的工作?1、确定采用公司测试环境,不用考虑环境问题。也就是说,客户端、服务端以及带宽等一系统都可以不用考虑,这是固定。
2、考虑此项目组以前开发过的系统性能情况,能否做为一个参考值。解决方案:找出本项目组以并发过二个项目,其性能个项指标进行求权。其中浏览功能:并发数为1100,平均响应时间363秒;每用户平均响应时间为0.33秒。
每秒中并发3个用户。其中一系统用户已达500万,另一系统用户为320万。并且二系统一直运行正常,但目前的二系统的服务器各为3台。
可以得出一台服务器为载166万,甚至更多。(因为服务器中有求权的关系)3、100万用户,那么怎么计算出他的每小时峰值活动用户数?解决方案:采用80•20原则计算得到每小时峰值活动用户数 6.667万/小时;那么每秒中的同一功能点点击并发数应该是18.5。4、怎么得其并发数?解决方案:本系统有多少个功能点?功能点为153个;也就是本系统在高峰值时一功能将被点击1258次,每秒点击0.35次。
(不考虑间隔时间)考虑以前本项目组的数值。初步设置并发数为1100,主要以浏览功能为主、其次是查询和新增。5、应该测试那种性能类型经再三考虑,三种性能都进行测试。执行性能:评测,依据性能指标确定中的第三点,将用户的并发设置为300-350,看其情况。
负载测试,以1100为起点强度测试,为15小时和24小时为准性能测试结果:发现本系统最大用户支持为1100.失败用户最高为209,响应时间为315。可以判断此系统最大并发数为1100左右。也就说此系统在一台服务器上可支持150万用户数。根据上述情况,可以得出:1100用户并发时,用户一共响应时间为315秒(即每用户平均响应时间0.005秒),其中最高产生209个失败用户,但成功用户基本上可以完成后续操作,符合现系统要求的最大稳定用户数。
由此可得出本系统在新增功能点中支持最大用户并发数为1100。按照1*100比例,计算得到每小时峰值活动用户数11万/小时;采用80•20原则计算得出本系统支持注册用户数约为165万。而本系统性能需求大规模支持100万注册用户,由上述的数据我们的系统已达到本系统性能需求。注:100万,采用80•20原则计算得到每小时峰值活动用户数6.667万/小时。