Apache-2.2
Apache CentOS Server 很慢!配置錯誤?
我在 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
) 中獲得最大性能的資訊,但在那裡你能做的只有這麼多。總結:不要從網路伺服器開始,從追踪你的瓶頸並修復它開始——如果你發現你的網路伺服器有什麼可以幫助你的,那就試試吧,但不太可能修復應用程序的性能問題。