web-dev-qa-db-ja.com

Apache CentOSサーバーは非常に遅いです!設定が間違っていますか?

RAM 1and1.com仮想サーバーのApache構成8GBでサーバーの過負荷に問題があります。選択時間中に(Google Analyticsによると)100人以上のアクティブユーザーに到達すると、サーバーの速度が非常に遅くなります。 siege&loadimpactテストを実行し、httpd.confファイルにいくつかの構成変更を加えましたが、それで十分かどうかわかりません。16GBのようなRAMがもっと必要なのか、何かが足りないのでしょうか。プログラミングを最適化できることはわかっていますが、パフォーマンスが大幅に向上するかどうかはわかりません。興味深い事実は、並列メモリの使用量がこの過負荷時に10〜20%しか表示されないことですが、Webサイトは非常に遅いです!ヘルプ!

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>

my.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 

私は何か間違ったことをしていますか?私はすべての助けに感謝します!

1
Norm

最初に確認する必要があるのは、ボトルネックがどこにあるかを判断することです。

  • システムのCPUが固定されていますか、または使用可能なCPUはありますが、Webアプリケーションのプロセスがそれを効果的に使用していません(つまり、十分なワーカースレッドがありません)?
  • システムのRAMが不足していますか、それとも多くのスワッピングを行っていますか?
  • データベースにボトルネックがありますか?クエリが遅い、インデックスが必要、またはロックの問題が発生していますか?
  • アプリケーションリクエストの最初のバイトまでの時間を監視し、アプリケーションコードに触れないWebサーバーからの静的リソースのリクエストのそれと比較します。これにより、アプリの処理速度がわかります。リクエスト。

一般的に、これらの種類のパフォーマンスの問題は、Webサーバーの構成ではなく、アプリケーションに発生します。

ボトルネックを理解したら、Webサーバーソフトウェアを使用してそれを軽減できる場合があります(正確な方法は、実行しているアプリケーションコードと、Webサーバーに接続する方法によって異なりますが、多くの問題があります。 FastCGIまたはmod_passenger)を最大限に活用するための情報がありますが、そこでできることはたくさんあります。

要約:Webサーバーから始めるのではなく、ボトルネックを追跡して修正することから始めます。Webサーバーで何かできることがあれば、それを試してみてください。ただし、それができない可能性があります。アプリケーションのパフォーマンスの問題を修正します。

1
Shane Madden