Apache CentOS 服务器非常慢!配置错误?

Apache CentOS 服务器非常慢!配置错误?

我在 Apache 配置 8GB RAM 的 1and1.com 虚拟服务器上遇到了服务器过载问题。在选择时间内,一旦达到 100 多个活跃用户(根据 Google 分析),服务器就会变得非常慢。我已经进行了 siege 和 loadimpact 测试,并对 httpd.conf 文件进行了一些配置更改,但我不知道这是否足够。也许我只是需要更多的 RAM,比如 16GB,还是我缺少了什么?我知道我可以优化编程,但我不知道它如何能大幅提高性能。有趣的事实是,在这种过载期间,并行内存使用率仅显示 10-20%,但网站速度太慢了!救命!

Avg. site file size is 1.5MB (We have lots of pictures)
Avg. load time: 1.8s (during normal days) - 1,600 page views, 270 highest sessions p/h

这是服务器非常慢的一天的分析统计数据:

Highest sessions per hour: 420 - 700
Total sessions: 4,300 - 37,000
Page views: 25,300 - 361,500
Avg. Session duration: 9min

1and1 提供的服务器数据:

Webspace: 200GB
RAM: 8GB
Unlimited Traffic: yes
Operating System: CentOS 6 minimal system (64-bit)
cpu cores: 8
Processors: 4   
Processor: AMD Opteron(tm) Processor 6378 

Http.conf

Timeout 75
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 3

<IfModule prefork.c>
 StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      220
MaxClients       220     
MaxRequestsPerChild  5000
</IfModule>

我的配置文件

max_allowed_packet             = 1G
max_connections                = 500                              
max_user_connections           = 500                                 
thread_cache_size              = 500                                 
query_cache_type               = 1                                   
query_cache_size               = 128M                                 
sort_buffer_size               = 2M                                 
tmp_table_size                 = 32M                                
read_buffer_size               = 128k                               
read_rnd_buffer_size           = 256k                              
join_buffer_size               = 128k                                
table_definition_cache         = 400                                
table_open_cache               = 400                                 
key_buffer_size                = 500M                                 
max_heap_table_size            = 64M                              
innodb_buffer_pool_size        = 500M                                
innodb_additional_mem_pool_size = 20M
innodb_file_per_table          = 1                                  
innodb_flush_log_at_trx_commit = 2                                  
innodb_log_buffer_size         = 12M                                                           
innodb_log_file_size           = 256M 

我做错了什么吗?非常感谢大家的帮助!

答案1

您需要考虑的第一件事是确定您的瓶颈在哪里。

  • 系统的 CPU 是否被限制,或者是否有可用的 CPU,但是 Web 应用程序的进程没有有效地使用它(即,没有足够的工作线程)?
  • 系统是否内存不足,或者正在进行大量交换?
  • 您的数据库是否遇到了瓶颈?您的查询是否缓慢、需要索引,或者是否遇到了锁定问题?
  • 观察应用程序请求的首字节时间,并将其与不触及应用程序代码的 Web 服务器的静态资源请求的时间进行比较 - 这将显示您的应用程序处理请求的速度。

一般来说,这些类型的性能问题都出现在应用程序中,而不是 Web 服务器配置中。

一旦了解了您的瓶颈,您可能能够在 Web 服务器软件的帮助下缓解它(具体方法取决于您正在运行的应用程序代码以及如何将其连接到 Web 服务器,但有很多关于如何从 FastCGI 或 中获得最佳性能的信息mod_passenger),但您能做的事情非常有限。

总之:不要从 Web 服务器开始,而是从追踪您的瓶颈并修复它开始 - 如果您发现可以在 Web 服务器中做任何事情来帮助,那么尝试一下,但它不太可能能够解决您的应用程序的性能问题。

相关内容