精华内容
下载资源
问答
  • 服务器并发量计算

    千次阅读 2020-05-07 18:02:23
    并发 理论 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到...服务器并发量分为 1.业务并发用户数; 2.最大并发访问数; 3.系统用户数; 4.同时在线用户数; 并发限制因素 带宽: 总带宽 / 8*单个...

    并发

    理论

    在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但是任一个时刻点上只有一个程序在处理机上运行。

    实际

    在实际业务中,是指服务器在同一时间访问的人数,人数越大,瞬间带宽要求更高。

    服务器并发量分为

    • 1.业务并发用户数;
    • 2.最大并发访问数;
    • 3.系统用户数;
    • 4.同时在线用户数;

    并发限制因素

    带宽: 总带宽 / 8*单个请求大小=允许最大连接数

    端口:已经固定了,服务器监听的端口

    内存:(总内存 - 系统需要的内存) / 每个线程或者进程需要的内存=支持最大连接数

    CPU:1 / 处理每个请求需要的时间 = 单位之间内处理多少个请求

    求上述几个限制条件的最小值就是并发数最大值。

    经典公式

    理论

    一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据

    1)平均并发用户数为 C = nL/T
    2)并发用户数峰值 C‘ = C + 3*根号C
    C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度
    C’是并发用户数峰值
    

    举例:

    如用外卖点餐APP套入这个公式计计算下并发用户数100W用户下并发用户数大致范围:
    假设外卖APP有100W个用户,而日活用户假设占12.5%即12.5W个日活用户,而每个日活用户打开APP到点餐平均时间大概为5分钟,而假设早上8点到晚上12点都会有用户使用该APP。则可以计算出一个值:
    
    平均并发用户数C=125000*5/16*60=651
    并发用户数峰值C`=651+3*根号 651=726
    

    实际

    对绝大多数场景,可以用 (用户总量/统计时间)*影响因子(一般为3)来进行估算并发量

    举例:

    作为外卖APP大部分人都会在高峰期进行点餐,所以对于外卖APP这类应该单独进行考虑。
    我们采用2/8原则来估算并发用户数,即80%的用户数会在高峰期点餐,而高峰期设定为11-12,17-19点一共5个小时,在这种情况下估算并发用户数:
    
    平均并发用户数C=125000*5*0.8/5*60=1666
    并发用户数峰值C`=1666+3*根号 1666=1788
    

    本文来自网络收集

    展开全文
  • 未来属于那些相信梦想,并愿意为之付诸行动的人在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供...这个并发容量对于配置比较好服务器相对来说有点弱。深入Spri...

    未来属于那些相信梦想,并愿意为之付诸行动的人

    在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供优化的地方,力求最大性能。

    发现并发容器问题

    0e5448adf2ef1aafcf5abeebb5c3f623.png

    72ae60c3083760cbd0d57b4a98080bff.png

    对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%。这个并发容量对于配置比较好点的服务器相对来说有点弱。

    深入SpringBoot底层了解原因

    在SpringBoot官方文档中提到了关于元数据的配置41b8312e1db44622e5212cec74c69a0d.png1dabf6c644e6ef81bf8b6ac9e21782d7.png可以看到,关于我们最常用的设置项目的端口的默认配置就在其中。

    默认内嵌Tomcat配置
    1. server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。

    2. server.tomcat.max-connections:最大可被连接数,默认10000

    3. server.tomcat.max-threads:最大工作线程数,默认200,

    4. server.tomcat.min-spare-threads:最小工作线程数,初始化分配线程数,默认10

    • 默认配置下,连接超过10000后会出现拒绝连接情况

    • 默认配置下,触发的请求超过200+100后拒绝处理(最大工作线程数+等待队列长度)

    这些元数据Spring当然提供了外部配置功能

    #更改内嵌tomcat参数

    server.port=8080

    server.tomcat.accept-count=1000

    server.tomcat.max-threads=400

    server.tomcat.min-spare-threads=100

    7f44850191e2aa54665080433d625d19.png

    定制化内嵌Tomcat开发

    6449fe03c8cc4486a67b5c4d5afc2dbf.png

    关于KeepAlive

    在使用Jmeter的Http请求中默认是开启KeepAlive的

    Http的KeepAlive请求为当我们的客户端向我们的服务器发送Http请求的时候,若带上了KeepAlive的请求头,则表明我们的Http客户端希望跟服务端之间建立一个KeepAlive的连接,这个连接对应的用处就是说,向我们的服务端发送完对应的响应之后,我们的服务端不要立马断开连接,而是等待尝试复用连接。

    此解决方案是用来解决Http的一个响应,无状态,每次都要断开连接,新建连接所带来的一个耗时问题。

    但如果说我们每个网页请求打开之后都跟服务端保持一个长连接,那我们服务端的连接数很快就会被用完了,因此再最早的Http1.0的时候是没有设计KeepAlive的请求的,但是现在的Http1.1加上KeepAlive请求,目的就是越来越多的移动端的设备,甚至于一些很复杂的网页交互,需要在用户浏览的过程当中,频繁的向服务端发送请求,因此,建立一个KeepAlive连接,并非为了压测的目的,而是真正的在应用场景上是有一些性能的好处的,无论是客户端还是服务端,在做一些网络通信的交互上面,无需每次都新建连接,断开连接,耗费Tcp/Ip建连的时间,而仅仅只需要发送数据即可。

    但是这样的设计也会带来一些问题,如果说我们的服务端对KeepAlive的操作没有做任何限制 1.连接不做任何操作,不做任何响应,那这条连接对服务端来说就是一条费连接 2.有一些攻击者恶意利用KeepAlive连接向我们的服务端发送DDOS的攻击,那服务端对应的连接只会成为攻击者攻击的后门,因此,为了安全,我们需要定制化Tomcat开发

    配置
    1. KeepAliveTimeOut:多少毫秒后客户端不响应则断开KeepAlive

    2. maxKeepAliveRequests:多少次请求后KeepAlive断开失效

    在SpringBoot官方文档中提到了对内嵌容器的配置690e08429664d21d6170bdca11f87ed3.png

    //当spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会把bean加载进spring容器

    @Configuration

    public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {

    @Override

    public void customize(ConfigurableWebServerFactory factory) {

    //使用对应工厂类提供给我们的接口定制化我们的tomcat connector

    ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {

    @Override

    public void customize(Connector connector) {

    Http11NioProtocol protocol= (Http11NioProtocol) connector.getProtocolHandler();

    //定制KeepAliveTimeout,设置30秒内没有请求则服务器自动断开keepalive连接

    protocol.setKeepAliveTimeout(30000);

    //当客户端发送超过10000个请求则自动断开keepalive连接

    protocol.setMaxKeepAliveRequests(10000);

    }

    });

    }

    }

    容器问题优化

    响应时间变长,TPS上不去

    单Web容器上限

    线程数量

    4核CPU 8G内存单进程调用线程数800-1000,1000以上后即花费巨大的时间在CPU调度上

    等待队列长度

    队列做缓冲池用,但也不能无限长,消耗内存,出队入队也耗CPU

    Mysql数据库QPS容量问题

    主键查询:千万级别数据 = 1-10毫秒唯一索引查询:千万级别数据 = 10-100毫秒非唯一索引查询:千万级别数据 = 100-1000毫秒无索引:百万条数据 = 1000毫秒+

    展开全文
  • 点量软件在长期的开发过程中,为了解决客户遇到的这类问题,研发了一套流媒体中转系统(流媒体服务器),无论是界面还是操作都非常简单,可以轻松解决上文中提到的各种问题。具体来说,其功能和优势主要包括以下几个...

    视频在处理的过程中会遇到各种问题,比如格式不统一、自有视频源链接被盗、高并发人数的稳定性;而在电视直播流的变化过程中,还可能遇到组播地址如何变为单播地址的问题。那有没有一套系统可以解决这些问题呢?

    点量软件在长期的开发过程中,为了解决客户遇到的这类问题,研发了一套流媒体中转系统(流媒体服务器),无论是界面还是操作都非常简单,可以轻松解决上文中提到的各种问题。具体来说,其功能和优势主要包括以下几个方面:

    (1)解决直播流格式不统一问题

    简洁化操作,可将本地UDP、RTP等直播流,转变成M3U8的地址,不改变视频原有的清晰度。

    视频输入播放器的格式可能是多样的,而通过点量流媒体中转系统,可以将所有的视频格式转换成播放器都支持的M3U8,解决播放格式不统一问题。

    (2)对视频地址加密,防盗链

    对于经过点量流媒体中转系统的直播流地址,可以实现加密,加密后的视频配合点量播放器播放,防止视频源被盗。

    (3)支持对需要管理操作的电视直播流频道地址的手动处理,包括添加删除。

    (4)组播地址转变为单播地址

    该系统可实现将局域网直播流组播地址,转化为对外的单播地址,解决组播跨网段的问题,同时实现对其加密。

    (5)支持高并发

    通过点量流媒体中转服务器系统后,还可以解决人数高并发时期系统的稳定性。单台流媒体服务器软件,支持并发的用户规模数不少于5000用户。

    此外该流媒体中转系统运行在linux系统下,具体需要的带宽取决于码率和同时观看的人数。

    展开全文
  • 未来属于那些相信梦想,并愿意为之付诸行动的人在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供...这个并发容量对于配置比较好服务器相对来说有点弱。深入Spri...

    未来属于那些相信梦想,并愿意为之付诸行动的人

    在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供优化的地方,力求最大性能。

    发现并发容器问题

    89ce5acdb1a7ff1c0eb3995aad255225.png

    cb3a0c85819b73e957c2a8344db49083.png

    对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%。这个并发容量对于配置比较好点的服务器相对来说有点弱。

    深入SpringBoot底层了解原因

    在SpringBoot官方文档中提到了关于元数据的配置067e7b213cb620070fbe9d1d0ef9f551.png654404381fb5c1e33d1f5753a3d1916d.png可以看到,关于我们最常用的设置项目的端口的默认配置就在其中。

    默认内嵌Tomcat配置
    1. server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。

    2. server.tomcat.max-connections:最大可被连接数,默认10000

    3. server.tomcat.max-threads:最大工作线程数,默认200,

    4. server.tomcat.min-spare-threads:最小工作线程数,初始化分配线程数,默认10

    • 默认配置下,连接超过10000后会出现拒绝连接情况

    • 默认配置下,触发的请求超过200+100后拒绝处理(最大工作线程数+等待队列长度)

    这些元数据Spring当然提供了外部配置功能

    #更改内嵌tomcat参数

    server.port=8080

    server.tomcat.accept-count=1000

    server.tomcat.max-threads=400

    server.tomcat.min-spare-threads=100

    ad21301ebc17cfd5eed136f1c0d880dc.png

    定制化内嵌Tomcat开发

    8e6664adde98d393becb3ff85cc6e76e.png

    关于KeepAlive

    在使用Jmeter的Http请求中默认是开启KeepAlive的

    Http的KeepAlive请求为当我们的客户端向我们的服务器发送Http请求的时候,若带上了KeepAlive的请求头,则表明我们的Http客户端希望跟服务端之间建立一个KeepAlive的连接,这个连接对应的用处就是说,向我们的服务端发送完对应的响应之后,我们的服务端不要立马断开连接,而是等待尝试复用连接。

    此解决方案是用来解决Http的一个响应,无状态,每次都要断开连接,新建连接所带来的一个耗时问题。

    但如果说我们每个网页请求打开之后都跟服务端保持一个长连接,那我们服务端的连接数很快就会被用完了,因此再最早的Http1.0的时候是没有设计KeepAlive的请求的,但是现在的Http1.1加上KeepAlive请求,目的就是越来越多的移动端的设备,甚至于一些很复杂的网页交互,需要在用户浏览的过程当中,频繁的向服务端发送请求,因此,建立一个KeepAlive连接,并非为了压测的目的,而是真正的在应用场景上是有一些性能的好处的,无论是客户端还是服务端,在做一些网络通信的交互上面,无需每次都新建连接,断开连接,耗费Tcp/Ip建连的时间,而仅仅只需要发送数据即可。

    但是这样的设计也会带来一些问题,如果说我们的服务端对KeepAlive的操作没有做任何限制 1.连接不做任何操作,不做任何响应,那这条连接对服务端来说就是一条费连接 2.有一些攻击者恶意利用KeepAlive连接向我们的服务端发送DDOS的攻击,那服务端对应的连接只会成为攻击者攻击的后门,因此,为了安全,我们需要定制化Tomcat开发

    配置
    1. KeepAliveTimeOut:多少毫秒后客户端不响应则断开KeepAlive

    2. maxKeepAliveRequests:多少次请求后KeepAlive断开失效

    在SpringBoot官方文档中提到了对内嵌容器的配置11def4756f958534e75d08907da582c1.png

    //当spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会把bean加载进spring容器

    @Configuration

    public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {

    @Override

    public void customize(ConfigurableWebServerFactory factory) {

    //使用对应工厂类提供给我们的接口定制化我们的tomcat connector

    ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {

    @Override

    public void customize(Connector connector) {

    Http11NioProtocol protocol= (Http11NioProtocol) connector.getProtocolHandler();

    //定制KeepAliveTimeout,设置30秒内没有请求则服务器自动断开keepalive连接

    protocol.setKeepAliveTimeout(30000);

    //当客户端发送超过10000个请求则自动断开keepalive连接

    protocol.setMaxKeepAliveRequests(10000);

    }

    });

    }

    }

    容器问题优化

    响应时间变长,TPS上不去

    单Web容器上限

    线程数量

    4核CPU 8G内存单进程调用线程数800-1000,1000以上后即花费巨大的时间在CPU调度上

    等待队列长度

    队列做缓冲池用,但也不能无限长,消耗内存,出队入队也耗CPU

    Mysql数据库QPS容量问题

    主键查询:千万级别数据 = 1-10毫秒唯一索引查询:千万级别数据 = 10-100毫秒非唯一索引查询:千万级别数据 = 100-1000毫秒无索引:百万条数据 = 1000毫秒+

    展开全文
  • 并发下,如何缓解服务器压力?

    千次阅读 2019-07-05 11:30:37
    我们换成专业的问题,高并发下怎么优化能避免服务器压力过大? 1,整个架构:可采用分布式架构,利用微服务架构拆分服务部署在不同的服务节点,避免节点宕机引起的服务不可用! 2,数据库:采用主从复制,读写...
  • Java 并发-访问

    2019-10-08 05:30:33
    尽量使用缓存,包括用户缓存,信息缓存等,多花内存来做缓存,可以大量减少与数据库的交互,提高性能。统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。 2、网页尽量静态化...
  • 我们换成专业的问题,高并发下怎么优化能避免服务器压力过大? 1,整个架构:可采用分布式架构,利用微服务架构拆分服务部署在不同的服务节点,避免节点宕机引起的服务不可用! 2,数据库:采用主从复制,读写...
  • 【Xmind】单点登录

    2019-02-28 19:18:18
    单点登录系统:就是在分布式环境下的...并发量高的时候。需要加Tomcat集群 分布式: 单点登录系统服务器:统一管理session信息;(session服务器单点登录如果有多台服务器,存储session -- Redis 表现层: ...
  • 优化: 首先考虑系统的垂直优化,然后再考虑水平优化。   垂直优化:单点服务器做优化,代码优化、缓存优化等等。 水平优化:水平扩容服务器优化,集群、提高服务器硬件以及多配置服务器
  • SSO方案: 只是记录一个解决方案:(多服务器-五地三活策略) 1:利用-nginx的 ip_hash,去解决,思路就是,把某一台...这种适合并发量不大的情况下去做,缺点是容易发生单点故障 2:子系统之间同步session信息,实...
  • 并发访问不高的系统中,我们通常将应用部署到一台app服务器,为用户提供服务,当用户使用用户名和密码登录完成后,会把用户的信息会保存到session中,大家也都知道,session是保存在app服务器端的,这时,随着业务...
  • 对于访问较大的网站来说,随着流量的增加服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡。而如果实现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些...
  • JAVA高并发解决思路

    2020-08-26 00:25:06
    对于开发的人来说,如果项目访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。项目访问量非常大会引起服务器崩溃。为了应对这些高并发的问题,我们总需要做什么?... 应用需要支撑大量并发量,...
  • 如何进行并发编程

    2021-05-04 18:20:08
    如何进行并发编程 1.并发 并行与并发 ...线程(轻级进程)的最大优势是可以充分利用服务器的多核cpu计算资源,并发的处理任务。随人使用进程能够达到同样的目的,但使用了线程,速度可以提高一个数量
  • 本课由360架构师亲授,以360真实秒杀系统为切入, 从秒杀的功能入手,分层递进讲解,逐步让大家掌握系统的设计、架构以及优化,从容应对百万级、过亿级的秒杀活动及其它海量访问的互联网系统。1. Linux / Nginx / ...
  • 互联网高并发问题

    2017-12-19 10:30:19
    互联网高并发问题      一般的互联网应用,访问非常大,最常见的是高并发问题。...防止单点故障和扩展       同步   说起同步,就是要加锁,而锁又分为先三种   代码层次上的,如j...
  • 从技术角度来看,这属于一场高并发事故。 如微博、12306、电商App双...在此,来自CSDN的博客作者@ALLENsakaru,为我们分享了一篇如何处理高并发单点故障的文章。 以下为全文: 如何设计一个高并发系统? 如果...
  • 这里写目录标题一、单节点Redis...单点故障 无法处理大量数据并发数据请求 数据丢失一大堆 解决方法:         所以我们需要搭建Redis集群 二、Redis集群介绍 Redis集群是一个提供在多个Redis间
  • 并发带来的问题极其解决方法

    千次阅读 2018-12-04 23:09:15
    2容易产生单点故障 3所有的静态资源(img、html、css、js)都交给了tomcat来处理,导致性能下降 解决高并发服务器压力大、性能变差问题使用mysql集群 解决:不把mysql部署到服务器里面,先请求服务器,服务器再...
  • 文章目录Tomcat简介一、jdk的安装与配置二、Tomcat的安装与配置三、在tomcat中实现session共享什么是...Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻级应用服务器,在中小型系统和并发访问用户...
  • 复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等mysql复制功能介绍mysql复制功能提供分担读负载复制解决的问题实现在不同服务器上的数据分布利用二进制日志增量进行...
  • 一,大型网站的特点:1,并发数量高,访问大。2,处理的数据大(上1势必造成如下)3,用户分布广泛,网络环境复杂。4,稳定性高。5,易于扩展。6,安全性高。二,大型网站的基础设施1,服务器介绍1.1,塔式服务器 ...
  • 1、可能的问题要将 redis运用到工程项目中,只使用一台 redis 是万万不能的,原因如下:(1)从结构上 ,单个 redis服务器会发生 单点故障 ,并且一台服务器需要处理所有的请求负载,压力较大。(2)从容量上 ,单个 ...
  • nginx台机器可以承受2w到3w的并发量。 任何一台服务器都有一个极限,一旦访问量到了这个,性能会急剧恶化。最大并发5W,实际上可能3-4W就会引发性能恶化,然后拖着到极限,最后宕机。 方案二、DNS负载均衡 ...
  • 复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等mysql复制功能介绍mysql复制功能提供分担读负载复制解决的问题实现在不同服务器上的数据分布利用二进制日志增量进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475
精华内容 190
关键字:

服务器单点并发量