`
csd_ali
  • 浏览: 137365 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

大幅度提高web应用的性能案例

阅读更多


  
前几天,我们就接到其他应用负责人的电话,说我们rate应用http响应超时,导致页面上调用他们json接口的数据也显示很慢。

        

         观察一下,大吃一惊。

 

         随便打开一张商品的页面,其中的两个json接口超时非常严重,分别是9秒,10秒。        

 

         再看看监控工具中统计出来的响应时间,如下图:

 

 

         在高峰期,响应时间都快到5秒了。严重影响到了用户体验。

        

         再看看取数据接口的性能:

 


 

 

即使是从数据库取数据,平均时间连1.5毫秒都不到。这里根本不会是瓶颈。于是把问题定位到了ApacheHttp请求过多,导致响应过慢。

        

         之前,httpd.cnf的配置是这样的:

         =============================================================

         Timeout 30

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 10

 

<IfModule worker.c>

     StartServers     5

     MaxClients       1024

     MinSpareThreads  25

     MaxSpareThreads  75

     ThreadsPerChild  64

     ThreadLimit      128

     ServerLimit      16

</IfModule>

=============================================================

 

MaxClients=1024,表示一个apahce最多只能处理1024个请求。其余的http请求都是浮云,需要等待。

MaxClients的值是由ThreadsPerChild(每个子进程的线程数量) ServerLimit(子进程数量)决定的。

MaxClients = ThreadsPerChild * ServerLimit

如果你把MaxClient设为2048ThreadsPerChild * ServerLimit还是等于1024,是没有效果的。

 

在这次优化中,我们把MaxClient设为2048, ThreadsPerChild设为64, ServerLimit设为32

 

MaxSpareThreads表示最多的空闲线程数。一个请求过来,如果线程池里有现成的线程,就直接处理该

请求,否则创建新的线程。在高峰期rate200多的tps,最多75个空闲线程显然太少了。

于是我们把这个值设为250

 

KeepAlive表示HTTP的一次连接,可以进行多次传输。 rate应用的http场景里,json接口对apache的压力是最大的。

其中一个json接口一天要被访问1700多万次。Json接口一个特性就是只取数据,没有接下来的交互动作。于是我们就把

KeepAlive设为off

 

最后的httpd.cnf配置是这样的:

=============================================================

Timeout 30

KeepAlive off

MaxKeepAliveRequests 100

KeepAliveTimeout 10

 

<IfModule worker.c>

     ServerLimit      32

     StartServers     3

     MaxClients       2048

     MinSpareThreads  25

     MaxSpareThreads  250

     ThreadsPerChild  64

</IfModule>

=============================================================

 

看看修改后的效果:

 

 

左边的红框框表示昨天的高峰期响应时间,右边表示今天的高峰期响应时间。

优化后的效果是非常非常的明显。

 

最后看看系统的load:

 

 

我们的load比昨天有明显地提高。这是正常的,因为apahce的进程、线程多了。

 

by 毛导

 

  • 大小: 13.6 KB
  • 大小: 31 KB
  • 大小: 11.3 KB
  • 大小: 14.5 KB
  • 大小: 32.7 KB
  • 大小: 39.6 KB
分享到:
评论
6 楼 myfoot 2011-05-19  
nice!
5 楼 csd_ali 2011-01-07  
apache设置的keepalive是http层次的,即应用层协议;
那么tcp层(传输层)有keep alive么? 答案是有的。比如我们的ssh,ftp连接都是基于tcp上设置了keep alive的;但是对于tcp来说,keep alive并不是他的标准协议中的;所以一般我们的http请求在tcp层是没有keep alive的;

我们公司使用的F5负载均衡,基于随即策略;并工作在tcp层,不提供keep alive支持。
但是恰巧F5有一个会话保持功能,可以保证一段时间内的同一个客户ip被路由到同一台webserver上去啦。


                              ------老徐
4 楼 csd_ali 2010-12-16  
lixjluck 写道
非常不错的分析。
楼主能否详细介绍一下keep alive
它是tcp层的,还是http层的
如果我的web server前段还有load balancer,那这个keep alive还有用吗
和四层交换,七层交换,有关系吗

keep alive是工作在http层的。
http是工作在tcp之上的。
keep alive设为on时,一次http请求结束时,不会马上关闭tcp连接。在一定时间内,可能还会有http请求,这时就不用再次创建tcp连接,减少创建连接的开销。
keep alive设为off时,一次http请求结束时,马上关闭tcp连接。

不会的。我们公司是用f5的,使用的是三角模式。keepalive是指TCP连接不中断,对于同一个tcp连接肯定是连接同一台服务器的。


3 楼 lixjluck 2010-12-16  
非常不错的分析。
楼主能否详细介绍一下keep alive
它是tcp层的,还是http层的
如果我的web server前段还有load balancer,那这个keep alive还有用吗
和四层交换,七层交换,有关系吗
2 楼 silencon 2010-12-16  
apache的配置也是也有研究的啊。。分析的很好,学习了很多这方面的知识,貌似这个工具不错
1 楼 qwe_rt 2010-12-16  
分析的非常好,赞,ps:我是沙发,

相关推荐

    智能 web 平台

    【智能Web平台】是一种高效的开发工具,专为专业的Web开发者设计,旨在大幅度缩短系统开发时间,提高工作效率。通过这个平台,开发者可以实现只需简单的鼠标操作就能完成系统的搭建,极大地简化了开发流程,使得复杂...

    WEB测试环境自动发布系统

    为了解决这些问题,设计了自动发布系统,这套系统能够更加及时、有迹可循地进行发布操作,大幅度缩短发布时间,并且能够在发布后提供稳定的测试环境。 在自动发布系统的发展过程中,出现了第一代和第二代自动发布...

    Java企业版中性能调节的最佳实践.pdf

    - **Apache JMeter**:适用于Web应用的负载测试,支持多种协议和功能。 - **LoadRunner**:业界领先的负载测试解决方案,支持广泛的协议和技术。 - **Gatling**:基于Scala和Akka的现代负载测试框架,适合高性能和大...

    servlet 4.0 FINAL

    - **意义**:HTTP/2的支持有助于提高Web应用的性能,减少延迟时间,增强用户体验。 ##### 2. Servlet容器性能提升 - **改进措施**:Servlet 4.0对Servlet容器进行了优化,包括改进线程模型、增加异步处理能力等。 -...

    React框架介绍及相关教程、案例.docx

    - **Gatsby**: 静态网站生成框架,适合构建高性能的Web应用。 - **React Native**: 用于构建原生移动应用的框架。 #### 八、开发工具 - **React Developer Tools**: 浏览器插件,用于调试React应用。 - **...

    Citrix_Netscaler_Datasheet.pdf

    NetScaler能够显著提升Web应用的运行速度,最高可达五倍,并确保高可用性和安全性的同时大幅度降低成本。 #### 二、产品特性与优势 1. **应用加速** - **客户端和服务器TCP优化**: 通过优化传输控制协议(TCP)来...

    Delphi程序设计技巧集 Delphi2005 BS程序设计技巧集

    - IntraWeb支持AJAX技术,可以实现局部刷新,提升Web应用性能。 6. **安全性考虑**: - 对于Web应用程序来说,安全性至关重要。 - 开发者需要注意防止SQL注入、跨站脚本攻击等问题,并确保数据传输的安全性。 #...

    基于Springboot+Vue的图书进销存管理系统毕业源码案例设计(高分项目).zip

    Spring Boot是一个能够简化Spring应用开发的新框架,它通过约定优于配置的理念,大幅度提升了开发效率。Spring Boot对各种常用框架的自动配置,让开发者无需进行繁琐的配置工作,即可快速启动项目。它的内嵌Web...

    学习路之uniapp-goEasy入门-最新版本

    uni-app不仅能够帮助开发者快速构建移动、Web以及各种小程序的一体化应用,还能大幅度提高开发效率和代码复用性。而GoEasy则是一个实时数据推送平台,它能够帮助开发者轻松实现服务器向客户端推送消息的功能,这对于...

    8基于java的简历系统设计新版源码+数据库+说明.zip

    Navicat 11以其直观的界面和强大的功能而广受开发者的青睐,可以大幅度提高数据库操作的效率和准确性。 最后,对于开发环境的构建,本项目支持多种集成开发环境(IDE),包括Eclipse、MyEclipse和IntelliJ IDEA。这些...

    ssm9704学术团队管理系统+jsp.zip

    在本项目中,ssm框架的使用大幅度简化了代码编写和系统配置,提高了开发效率。 Vue.js(通常简称为Vue)是一个用于构建用户界面的渐进式JavaScript框架,它专注于视图层。Vue以其简单易用、灵活高效的特点,受到...

    SAP HANA开发指南 v2

    通过列式存储结构结合高效的压缩算法,可以在保持高性能的同时大幅度减少所需内存空间。 #### 多模型支持 SAP HANA支持多种数据模型,包括关系型数据模型、文档数据模型、图数据模型等,这使得用户可以灵活选择最...

    【springboot9255】基于Springboot+vue的疫情信息管理系统.zip

    系统基于Spring Boot框架进行构建,这意味着它能够以最小的配置快速启动和运行Spring应用,大幅度提高了开发效率。同时,Vue作为前端技术,不仅能够实现动态的单页面应用程序(SPA),还能与后端进行有效的数据通信...

    Spring+2.0+技术手册

    Spring 2.0 版本在原有基础上进行了大幅度优化,增加了许多新特性,使得开发人员能够更加灵活地构建复杂的应用程序。 #### 二、Spring 2.0 的新特性 1. **依赖注入(Dependency Injection, DI)增强**:Spring 2.0...

    python-django基于python技术的学生管理系统的设计与开发.zip

    为了方便数据库的管理和开发,本项目推荐使用Navicat11作为数据库工具,这是一款功能强大的数据库管理工具,支持多种数据库系统,可以大幅度提高开发和维护数据库的效率。 开发环境的搭建也是开发过程中的重要一环...

    Getting MEAN with Mongo, Express, Angular, and Node, 2nd Edition (True PDF)

    在第一版的基础上,第二版进行了大幅度的更新和完善,不仅包含了最新的技术和最佳实践,还针对不同的学习层次提供了详尽的指导。此外,本书也获得了来自业界专家的高度评价: - Matt Merkes(MyNeighbor)称赞本书...

    Ext JS学习资料

    2. **高性能与优化**:该版本对性能进行了大幅度优化,提高了渲染速度和响应性。 3. **数据绑定**:Ext JS 4 支持双向数据绑定机制,简化了数据处理流程。 4. **强大的图表功能**:内置的图表库支持多种图表类型,如...

    深入浅出nodejs.pdf

    而Node.js采用了事件驱动、非阻塞I/O模型,从而大幅度提高了I/O密集型应用的性能。这种设计允许Node.js在处理大量并发连接时,仅需较少的线程,有效利用服务器资源,特别适合于高并发场景。 Node.js的另一个重要...

    java面试视频资源JAVA并发编程之多线程并发同步业务场景与解决方案

    又如,在进行大数据量的批量处理时,多线程并行处理数据能够大幅度提高处理速度,但是如何同步每个线程完成任务后的结果汇总就成为一个挑战。 针对这些场景,本资源提供了具体的解决方案,例如通过锁的粒度控制来...

    基于python的校园用车管理系统源代码(python毕业设计完整源码).zip

    它的使用能大幅度提高数据库操作的效率和准确性。 开发软件选择了PyCharm,这是由JetBrains公司开发的一款针对Python语言的集成开发环境(IDE)。PyCharm提供了代码自动补全、重构、调试等强大的功能,同时也支持...

Global site tag (gtag.js) - Google Analytics