Apache-2.2

Apache CentOS Server 很慢!配置錯誤?

  • December 13, 2014

我在 Apache 配置 8gb RAM 1and1.com 虛擬伺服器上遇到伺服器過載問題。一旦在挑選期間達到 100 多個活躍使用者(根據Google分析),伺服器就會變得非常緩慢。我已經完成了 siege & loadimpact 測試並對 httpd.conf 文件進行了一些配置更改,但我不知道這是否足夠。也許我只需要更多的記憶體,比如 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>

我的.conf

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 

難道我做錯了什麼?我感謝所有的幫助!

您需要查看的第一件事是確定您的瓶頸在哪裡。

  • 系統的 CPU 是固定的,還是有可用的 CPU 但 Web 應用程序的程序沒有有效地使用它(即,沒有足夠的工作執行緒)?
  • 系統記憶體不足,還是進行了大量交換?
  • 你的數據庫遇到瓶頸了嗎?您是否有緩慢的查詢、需要索引或遇到鎖定問題?
  • 觀察應用程序請求的第一個字節的時間,並將其與從不觸及應用程式碼的 Web 伺服器請求靜態資源的時間進行比較 - 這將向您顯示應用程序的處理速度請求。

一般來說,這類性能問題將出現在應用程序中,而不是 Web 伺服器配置中。

一旦你了解了你的瓶頸,你就可以藉助你的網路伺服器軟體來緩解它(具體的方法取決於你正在執行的應用程式碼以及你如何將它附加到你的網路伺服器上,但是有很多那裡有關於從 FastCGI 或mod_passenger) 中獲得最大性能的資訊,但在那裡你能做的只有這麼多。

總結:不要從網路伺服器開始,從追踪你的瓶頸並修復它開始——如果你發現你的網路伺服器有什麼可以幫助你的,那就試試吧,但不太可能修復應用程序的性能問題。

引用自:https://serverfault.com/questions/652214