当前位置: 首页 > news >正文

哪个网站做攻略比较好凤岗建设网站

哪个网站做攻略比较好,凤岗建设网站,西安网站seo工作室,做乡镇网站前言 上一篇文章我们讲解了一下Tomcat底层的结构和执行原理#xff0c;我们需要重点去掌握的是Tomcat的高内聚低耦合的设计#xff0c;以及责任链模式#xff0c;以及Tomcat NIO编程模式#xff0c;这些是Tomcat比较核心的点#xff0c;本篇文章我们将对Tomcat的参数做一…前言 上一篇文章我们讲解了一下Tomcat底层的结构和执行原理我们需要重点去掌握的是Tomcat的高内聚低耦合的设计以及责任链模式以及Tomcat NIO编程模式这些是Tomcat比较核心的点本篇文章我们将对Tomcat的参数做一些了解然后通过Jemeter压测来对Tomcat进行调优。 一.Tomcat参数 首先我们来了解一下Tomcat可以优化的参数官方文档上有详细的解释 https://tomcat.apache.org/tomcat-8.0-doc/config/index.html 1.Connector 连接器优化 Connector连接器是用来处理客户端请求的Tomcat主要提供了 BIONIOAIO 三种方式BIO是同步阻塞适用于少量请求的情况NIO是同步非阻塞适用于连接数多并发高的业务场景。Tomcat8默认使用NIO一般也不需要去修改,如果需要修改IO模式修改server.xml 的Connector Connector port8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443maxParameterCount1000/protocol“HTTP/1.1” 默认NIO 直接修改 protocol“org.apache.coyote.http11.Http11NioProtocol” : NIOprotocol“org.apache.coyote.http11.Http11Protocol” : BIO Tomcat9已经移除protocol“org.apache.coyote.http11.Http11AprProtocol” :AIO 不稳定性能没有想象中那么高不用 所以连接器一般不用优化 2.Executor 线程池优化 配置文档https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html Tomcat底层通过Excutor线程池来处理任务线程池是我们可以优化的点如果对线程池不理解的同学可以先去恶补一下哦。官方文档中提供了几个重要的参数 maxThreads (int) 该池中活动线程的最大数量默认为200 最大线程数是一个很重要的优化点我们应该根据机器的性能去合理设置。优化方案:通常情况下通过压测工具去压测Tomcat然后修改最大线程数当CPU及内存占用在80%左右且平均响应时间和吞吐量达到最优那么这就是一个合理的线程数。 要注意的是线程数不是越大越好线程数过多CPU在线程中的上下文切换会越耗时反而会导致整体性能下降或者CPU 100%导致系统卡死的情况。但是如果线程数过少会导致无法充分发挥CPU性能所以通过压测来修改最大线程数是比较合理的方式。网上也有一些通用公式线程数 CPU核心数 * (1 IO耗时/CPU耗时) 这个也只能作为参考不一定适合所有场景。 minSpareThreadsint 始终保持活动状态的最小线程数空闲和活动默认为25 , 最小线程数可以根据预估并发量来调整当并发上来minSpareThreads 线程消耗完就会创建新的线程最大可以创建maxThreads个线程。 maxIdleTime int 非核心线程最大空闲时间超过这个时间线程会被销毁默认1分钟该值一般不需要怎么调整。 maxQueueSize int 线程池的等待队列当最大线程数都使用完之后请求会在队列中排队默认值为Integer.MAX_VALUE 当所有的线程都在忙碌而队列也满了的时候请求就会被拒绝该值根据并发量 和 平均响应时间 预估进行设置 如果不设置很有可能一瞬间来了大量的请求都会被Tomcat接受从而把资源(CPU/内存)消耗空导致服务器宕机。 我们应该对服务器有一个基本的负载能力预估比如我只能处理每秒500的请求那么注定超过500的请求是需要拒绝掉的我们需要在响应时间和资源利用率之间找到一个平衡点所以如果队列设置太大会导致大量请求等待造成平均耗时较长。设置太小又回导致大量请求被拒绝你需要通过监控和性能测试来确定最佳的maxQueueSize值。观察系统的响应时间、吞吐量、资源利用率等指标并根据这些指标来调整队列大小。这里给点建议如果是计算型业务可以设置几十到几百如果是IO型业务可以设置到几百到一千。配置如下 Executor nametomcatThreadPool namePrefixcatalina-exec- maxQueueSize200maxThreads200 minSpareThreads24/Connector executortomcatThreadPoolport8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443maxParameterCount1000 /3.关闭不要功能 Tomcat有一些组件在某些业务场景下是不需要的开启后会消耗服务器资源可以选择关闭 删除AJP AJP是Tomcat用来兼容阿帕奇的一般我们都用不到所以可以在server.xml配置文件中把他删除或者注释 Connector protocolAJP/1.3address::1port8009redirectPort8443maxParameterCount1000/关闭热部署 Tomcat的autoDeploy表示自动部署即热部署。当autoDeploy设置为true时Tomcat会检查appBase目录下是否有新的或被覆盖的WAR包并会重新加载web程序。这样你就可以在不重启Tomcat的前提下部署程序也是比较消耗性能的生产环境中可以关闭 : autoDeploy“false” Host namelocalhost appBasewebappsunpackWARstrue autoDeployfalse另外一个就是 reloadable属性用于控制Tomcat在运行时是否监视Web应用程序的/WEB-INF/classes和/WEB-INF/lib目录下class文件的改动,关闭如下 Context docBaseyour_webapp_path path/your_webapp reloadablefalse ... /Context关闭默认Servlet Tomcat提供了处理html静态资源的DefaultServlet和处理JSP的JSPServlet在齐纳后端分离的项目中一般是不需要Tomcat去处理今天资源。而是通过Nginx做动静分离了所以是可以把它关闭找到web.xml把下面配置注释即可 servletservlet-namedefault/servlet-nameservlet-classorg.apache.catalina.servlets.DefaultServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value0/param-value/init-paraminit-paramparam-namelistings/param-nameparam-valuefalse/param-value/init-paramload-on-startup1/load-on-startup/servletservletservlet-namejsp/servlet-nameservlet-classorg.apache.jasper.servlet.JspServlet/servlet-classinit-paramparam-namefork/param-nameparam-valuefalse/param-value/init-paraminit-paramparam-namexpoweredBy/param-nameparam-valuefalse/param-value/init-paramload-on-startup3/load-on-startup/servlet其实还可以关闭的东西有很多比如Websocketsession 如果你用不到都可以把他关闭这样就可以把资源节约出来了。 4.启用数据压缩 Tomcat可以通过配置其服务器设置来启用压缩功能以减少网络传输的数据量并提高网站的性能和加载速度。 Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 compressionon compressionMinSize2048 compressableMimeTypetext/html,text/xml,text/javascript,text/css,text/plain /compression : 开启压缩compressionMinSize 小于2M不压缩compressableMimeType 针对于哪些数据进行压缩 二.Tomcat项目压测 1.准备项目 IDEA导入Tomcat源码后创建一个Servlet,在Service方法中sleep 100毫秒模拟方法的耗时代码如下 public class MyDefaultServlet extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {Thread.sleep(100);System.out.println(成功访问到Service);} catch (InterruptedException e) {throw new RuntimeException(e);}} }然后找到web.xml文件对Servet做配置,把url映射到 createOrder 路径 servletservlet-nameMyDefaultServlet/servlet-nameservlet-classorg.apache.catalina.servlets.MyDefaultServlet/servlet-class/servletservlet-mappingservlet-nameMyDefaultServlet/servlet-nameurl-pattern/createOrder/url-pattern/servlet-mapping 项目启动后我们就可以通过 http://localhost:8080/createOrder来访问项目了 2.JConsole指标监控 Tomcat优化不是盲目设置参数在Tomcat调优的过程中我们需要对相关参数指标进行监控比如错误数、线程池、CPU 以及 JVM 内存等等根据真实的执行情况进行调试。这里我们通过Java自带的监控工具 jconsole 来监控Tomcat 。 使用cmd执行 jconsole 然后在本地连接里面找到Tomat的启动进程点击连接 如果是远程的话需要开启远程连接我们可以在 Tomcat 的 bin 目录下新建一个名为setenv.sh的文件内容如下 1 export JAVA_OPTS${JAVA_OPTS} -Dcom.sun.management.jmxremote 2 export JAVA_OPTS${JAVA_OPTS} -Dcom.sun.management.jmxremote.port8011 3 export JAVA_OPTS${JAVA_OPTS} -Djava.rmi.server.hostnamex.x.x.x 4 export JAVA_OPTS${JAVA_OPTS} -Dcom.sun.management.jmxremote.sslfalse 5 export JAVA_OPTS${JAVA_OPTS} -Dcom.sun.management.jmxremote.authenticatefalse这样 JMX 的监听端口 8011 就开启了接下来通过 JConsole 来连接这个端口。 在概览中可以看到堆内存线程数CPU占用率等几个重要指标下面是线程情况我们可以看到工作线程Poller线程Acceptor线程情况。 有了这些指标我们就可以结合压测工具进行压测一般在极限压力下CPU和内存使用率达到80%较佳然后不停的调整Tomcat相关参数比如线程池数量JVM内存大小等以至于达到一个追加的吞吐量。 我们还可以再MBean里面看到一些核心类的值比如请求数量错误数量等等 3.jemeter工具安装 下载jemeter压测工具https://jmeter.apache.org/download_jmeter.cgi 下载后解压找到bin/jemeter.bat 启动。启动后切换一下语言环境 options - choose language - chinese 然后再测试计划中 - 右键 - 新建线程组线程组就是用来模拟客户端的请求的 然后设置线程数和时间比如模拟2S钟500个请求循环发送10次一共5000个样本也可以一直循环发送 添加Http请求线程组 - 右键 - 添加取样器 - Http请求然后指定好Tomcat的ip:port和资源路径 如果需要设置请求参数可以在 参数一栏设置 然后给线程组添加 结果报告或者 聚合报告来监控压测结果 4.开始压测 点击开始按钮jemeter就会按照设定的线程数向后端发请求进行压力测试了测试的结果在聚合报告中可以查看,压测效果如下 大概含义是总共发送了5000个请求平均耗时 207毫秒最小耗时100毫秒最大耗时685毫秒吞吐量: 每秒1307个请求。 我们可以把线程组 - 循环勾上这样可以一直让jemeter发请求进行压测然后观察JVM情况如下 从jconsole中来看线程峰值是218堆内存的使用150M都不到CPU使用率也才1%不到这是因为我的电脑配置是12核24G内存。所以我的资源使用率是很低的可以尝试把Tomcat线程数调大。 Executor nametomcatThreadPool namePrefixcatalina-exec-maxThreads1000 minSpareThreads500/Connector port8080 protocolHTTP/1.1executortomcatThreadPoolconnectionTimeout20000redirectPort8443maxParameterCount1000/然后把jemeter的压测数据调大改成1000线程1s 然后循环压测效果如下 这一次堆内存占用达到了600M 线程峰值达到了 1020个线程cpu使用率2%左右(CPU太强悍了) jemeter压测效果达到了 8600 QPS 如下 QPS变高了但是也出现了错误率错误率一般是因为并发太高一瞬间请求太多1000/1s导致Tomcat处理不过来拒绝了请求导致的。我们继续加大压测力度jemeter线程数调整为 2000 然后再加大 Tomcat线程数到 2000 Executor nametomcatThreadPool namePrefixcatalina-exec-maxThreads2000 minSpareThreads1000/持续一分钟jemeter 压测效果如下: 尽管我们把线程数调到 2000压测出来的吞吐量反而降到了6000左右而且最大耗时接近9S了所以Tomcat线程数并不是越大越好 尽管Tomcat官方说的NIO最大可以处理到(1024 * 8)个连接但是它并不适合你的机器我们接下里就是不停的去压测和调整线程数获取其他参数来使性能达到最优即可。当然我这里的测试并不精准因为我使用的是本地PC测试。 项目本身Jemeter压测工具Jconsole监控工具都在 本地都在抢夺CPU和内存同时还需要考虑 网络开销所以只能做一个相对值的参考。 在企业中我们应该把应用部署在真实的服务器上然后在本地通过jemeter远程压测才能测试出真实的效果然后一边压测一边调试相关参数。 三.其他方面调优 一个系统的性能遵循漏桶原则所以系统调优需要从多方面进行比如应用本身的性能优化的再好但是业务很耗时一样会拖慢整体性能。业务很快但是网络不行也会导致整体性能降低下面我们从几个方面讨论一下优化思路。 上面案例中我睡眠了100毫秒来模拟业务耗时假如我业务耗时只有10毫秒会发生什么情况是不是性能直接提升十倍呢 所以我们的业务耗时越小应用的整体QPS也会越高在实际的开发中我们优化业务的思路有很多比如 1.算法优化 业务越快越好假如 1个线程1s能处理1次业务那么200个线程1s能处理200个业务如果把业务耗时减少到10毫秒那么整体的性能提升 100倍 200 * (1000 / 10) 20000 这是理论数据所以业务越快越好。 优化算法让代码变得高效比如减少嵌套循环避免大数据循环嵌套处理 2.数据库优化 业务处理难免会和数据库打交道数据库的数据基于磁盘IOJava应用和数据库交互也会产生网络IO当表数据较大时SQL处理就会比较慢会拖慢整个业务所以需要做数据库优化比如SQL优化索引优化主从优化大表拆解等从而提升查询速度 3.缓存优化 使用缓存减少数据库操作减少数据库交互次数或直接基于Redis 或 本地内存操作。甚至使用Nginx缓存 CDN缓存客户端缓存等 4.优化JVM 高并发下会瞬间创建大量的对象当内存不够时频繁触发GCGC的时候会出现STW(停顿应用线程来执行垃圾回收)导致业务处理耗时边长。这个时候就需要进行JVM优化,通过设置JVM参数来减少CG或者减少Full GC 选择合适的垃圾回收器也能很大程度提升应用性能。 ps:避免在for循环中new对象哦 5.异步优化 业务能够使用异步就尽可能异步话可以通过线程池来加大业务处理速度。或者通过MQ消峰把耗时的部分业务异步处理能大大提升业务处理速度。 6.硬件优化 给机器或应用增加 内存和CPU或者网络带宽对性能的提升是非常大的比如同样的条件下2核CPU核8核CPU带来的性能体验是完全不一样的。 7.集群优化 单机优化不动了就可以通过加机器做集群通过Lvs集群nginx集群单机3-5W并发实现负载均衡把请求负载到多台Tomcat上一起来处理业务加入一台机器能处理2000QPS那么搞10台就可以处理2W QPS。也可以使用F5这种负载均衡器他的并发能力可以达到几十万可不是Nginx能比的 8.机房分流 如果用户量非常大遍布全国各地那么可以做CDN分流比如成都机房部署一套集群架构能够承担 20W并发那么根据用户群分布我可以在上海北京杭州等多地都部署几套然后通过CDN把用户流量负载均衡到对应城市的机房集群中这样一来每秒百万级请求都可以处理。 所以说到最后想要抗住高并发就是加机器加钱。然而并发量能够每秒上万的项目又有多少不占20%把。 看到最后的兄弟评论区见评论区打 “我看到最后啦”
http://www.dnsts.com.cn/news/211305.html

相关文章:

  • 淮安谁家做网站创业做招商加盟类网站赚钱
  • 浙江宏兴建设有限公司网站青岛新网站设计公司
  • 无锡做网站设计的公司怎么提高网站seo优化关键字排名
  • 男女插孔做暖暖的试看网站大全网站建设设计摘要
  • 营销类网站设计 要点wordpress文章按阅读次数排序
  • 无法跳转到建设银行网站网络工程师什么时候考
  • 手机网站建设机构俄罗斯做牙网站
  • 网站文章内链怎么做网站建设 甲方欠款 如何处理
  • 阿里云虚拟主机做企业网站帝国建站教程
  • asp.net mvc5网站开发安装未连接到wordpress
  • 网站建设个人接单罗田住房和城乡建设局网站
  • 网站推广基本方法沈阳有资质做网站的公司有哪些
  • 怎么改网站关键词php网站进后台
  • 爱网站查询挖掘工具seo网站程序
  • php网站建设的几个流程子域名网址查询
  • 给一个网站做需求分析建筑模板尺寸规格及价格
  • 昆明网络推广昆明网站建设昆明昆明wordpress 制作落地页
  • 做集团网站应注意什么东莞塘厦做网站
  • 律师做网络推广最好的网站有哪些网站域名一年多少钱
  • 网站建设方案书备案设计图ctoc的网站有哪些
  • 河南网站优化排名手把手指导做网站
  • 常熟建设网站短视频素材下载网站
  • 阿里云网站备案多少天一个网站上线的时间
  • 北京市电力建设公司网站wordpress弹窗视频
  • 织梦网站修改首页图片网站建设预算申请如何写
  • 导购网站开发要多少钱室内设计作品
  • 自建网站如何在百度上查到手机网站封装小程序
  • 做网站的价格移动互联网站开发
  • 资阳网站优化淘宝做导航网站有哪些
  • 做体力活的网站做视频网站流量费高吗