Apache 1.3负载增加,直到在CentOS / EC2上重启/优雅。 CPU使用率攀升,memcached访问速度下降

在EC2上运行一个大型的mod_perl应用程序时,我们注意到实例的CPU使用率在重启或平稳重启之间逐渐攀升。

当前设置:CentOS 5.4,m2.4xlarge实例,Apache 1.3与mod_perl。

我们在跟踪应用程序的memcached请求速度时首先注意到了这一点。 当每个apachesubprocess变得更老时,读取/写入在同一主机上运行的memcached实例需要更长的时间。 我们发现,每小时做一个优雅的apachectl可以防止这种情况发生,每次都会增加负载。

无论是什么导致这种放缓,在我们的神经节监测中也是显而易见的。 我们一直在运行一台服务器而没有每小时重新启动,尽pipe其速度服务请求与其他服务器相同,但CPU使用率始终较高。 “负载”数字大致相同,但系统CPU数字更高。

我正在摸索着解决这里发生的事情,因为每小时重新启动apache孩子意味着我们错过了caching中的好处。

有没有人看过类似的东西? 当我们的应用程序在我们的某个数据中心的真实硬件上运行时,这似乎不会影响我们的应用程序,尽pipe我们使用了SUSE。

更新1:感谢voretaq7。 我们select了具有68GB RAM的m2.4xlarge实例types。 我们目前的apache调优(160个孩子一直在运行)使我们只使用了大约一半,所以我们已经closures掉了。 没有任何等待中央处理器或被盗的CPU,因为实例大小意味着我们不与其他任何人共享未定主机。 我们看到用户和系统CPU,系统CPU比在我们每小时进行平稳重启的机器上要多。

更新2:我目前正在运行三台服务器的另一个试用版。 一个是每小时运行一个优雅的apachectl,一个用MaxRequestsPerChild = 512设置,第三个用MaxRequestsPerChild = 64。这是试图弄清楚,如果是以某种方式修复父母的优雅重启,或者如果是孩子只是没有跑得这么久。 我将使用此设置运行12小时并比较统计信息。

更新3:为MaxRequestsPerChild运行一个较小的值的孩子做了一些改进。 不过,优雅重启的主机仍然performance较好。

更新4:每个主机运行三个Apache实例(总共160个孩子)和三个memcacheds。 只有一个CPU核心,我徘徊在上下文切换的成本。 我跑了一个试验,其中一个主机将所有的memcacheds固定到CPU0,而apache固定到CPU1-7。 这对性能有了显着的改善。 我仍然不清楚是什么导致CPU使用率降低之间的Apache重新启动,但它看起来好像一个CPU亲和力,偶尔优雅重新启动和较短的孩子生命周期的组合可以加快速度。

# Start the three memcacheds as follows /bin/taskset --cpu-list 0 /usr/local/bin/memcached -d -p 12345 # Start apache as follows /bin/taskset --cpu-list 1-7 apachectl start 

应用于apache父进程的任何CPU关联将应用于它所生成的所有subprocess。

看起来上下文切换是apache缓慢的主要原因。 将memcached绑定到一个CPU和apache到所有其他的CPU都会大大提高速度。 有关详细信息,请参阅UPDATE 4:在问题中。