大幅度提高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 毛导

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值