我的服务器出了点问题,确实需要一些建议。内存使用率很好,系统负载也很好。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了解小贴士。