减少 Apache2 CPU 使用率

减少 Apache2 CPU 使用率

我的服务器出了点问题,确实需要一些建议。内存使用率很好,系统负载也很好。CPU 使用率非常高,导致网站速度明显变慢。它运行的是高度定制的 Drupal 版本。它是一个 EC2 大型实例(8 GB,不确定 CPU 是否合适)。

这是我的 Apache 配置:

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 40

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

# 
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
 KeepAliveTimeout 5

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers           8
MinSpareServers        5
MaxSpareServers       20
MaxClients           125
MaxRequestsPerChild  400
</IfModule>

我正在使用 prefork。有什么想法吗?

答案1

CPU 使用率可能来自 Drupal 或 PHP,并且不会受到 apache 设置的影响。

答案2

您的首要任务应该是尝试找出哪些请求导致了高 CPU 使用率。MySQL 和 Apache 都是 CPU 的重度使用者。如果您知道原因,您可以更轻松地对其进行优化。

当然,解决问题是最好的。但是,你也可以利用缓存创造奇迹。

一个简单的第一步是实现操作码缓存,如 APC 或 Zend Optimizer+。这将缓存已编译的 PHP 代码,从而减少在下次请求时再次编译的需要。

其次,确保 Drupal 缓存了所有可以缓存的内容。参见Drupal 缓存、速度和性能

三、实施,一个反向代理缓存,用于缓存所有静态内容和所有实际上不是动态的动态内容。如果您使用 Drupal 7 或 Pressflow,这将是最简单的。Varnish 每秒可以处理数千个请求,而 CPU 占用率远低于 Apache 处理少量请求所需的 CPU 占用率,因此您可以将任何请求卸载到 Varnish 上,从而减轻您的负载。它对我们的网络服务器产生了严重影响。检查http://drupal.org/project/varnish了解小贴士。

相关内容