Apache WebサーバーでCPUがメモリをロードするときに問題が発生します。
仮想マシンでbuntu Server 12.04 LTSを実行しています。私たちのサーバーには次の仕様があります:
Drupal(7.23)ベースのWebサイトを実行するようにサーバーを構成しました。したがって、Apache、PHP、MySQLをインストールしました...バージョンは以下のとおりです。
Apacheモジュールも実行しています。見てください(apachectl -M
):
Apache2.confには、次の設定があります。
Timeout 90
KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 5
HostnameLookups Off
LogLevel warn
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxClients 120
MaxRequestsPerChild 1000
</IfModule>
私のサイトの仮想ホスト:
<VirtualHost *:80>
ServerName blabla.bla.bla
ServerAdmin [email protected]
DocumentRoot /l/disk0/site/public_html
<Directory />
AllowOverride None
</Directory>
<Directory /l/disk0/site/public_html>
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
LogLevel warn
ErrorLog "/l/disk0/site/logs/Apache/site/error.log"
CustomLog "/l/disk0/site/logs/Apache/sit/access.log" combined
SSLProxyEngine on
RewriteEngine on
RewriteLog logs/rewrite_www_log
RewriteLogLevel 0
Include rewrites-www.conf
</VirtualHost>
Drupalモジュール:
私のサイトはシンプルで、訪問者は多くありません。たぶん1日500人ぐらいの話をしている。 Drupalは、CPUに大きな負荷をかける可能性がありますか?またはモジュール?
その他の問題はメモリ使用量です。プロセスが作成されると、80MがApache2に割り当てられます。多すぎると思います。
私の問題は、CPU(すべてのコア)の負荷が高いことです。ほとんどの場合、90%から100%の負荷に達しています!問題のプロセスはApache2です。記憶はまた哀れなく消費されます。合計8GBのうち、消費されるメモリは約6.5GBから7.5GBです。私のApache設定が間違っているのか、それとも本当にもっとハードウェアが必要なのかはわかりません(私はそうは思いません)。 Drupalは高いCPU負荷を引き起こす可能性がありますか?
CPU負荷が100%に達すると、サイトがダウンし、Apacheを再起動する必要があります。 Drupal APCを使用してBoostをインストールすることで回避策を実行しました。ある程度の効果はありましたが、CPUの負荷はまだ高く、非常に高いです。
DrupalモジュールやPHP拡張機能などのように、さらに情報が必要な場合はお知らせください。
その他の問題はメモリ使用量です。プロセスが作成されると、80MがApache2に割り当てられます。多すぎると思います。
それは実メモリですか、それとも仮想メモリですか?正直なところ、それほどではありません。もっと重要なことは、問題を引き起こしているものを修正することに焦点を当てるべきであり、「考える」ことが異なるものだけではありません。
Apacheプロセスで使用するメモリを少なくしたい場合は、モジュールを無効にする必要があります(各モジュールはメモリに配置する必要のあるコードが多いため)。しかし、有効にしたすべてのモジュールが必要な場合は、それだけです。
メモリに制約のあるマシンを管理する際に使用したアプローチの1つは、特定のタスクをApacheから他のサーバーに移動することで、個別に調整できるようにしました。
しかし、はるかに簡単なアプローチは変更することです
MaxClients 120
ワークロードに適したものに:
書き換えアクセスとメインサイトのトラフィックを考慮すると、1分あたり約70のリクエストがあります。現在、33の着信接続があります。
すぐに戻りますが、33の同時リクエストしか処理しない場合は、120ワーカーは必要ありません。
MaxClients 40
また、MinSpareServers
とMaxSpareServer
をそれぞれ5と10のように調整する必要があります。 30人の労働者が何もせずに座っている必要はありません。
今、に戻って
書き換えアクセスとメインサイトのトラフィックを考慮すると、1分あたり約70のリクエストがあります。現在、33の着信接続があります。
33の同時リクエストがあり、1分あたり70しか実行していない場合、いくつかの可能性があります。
#1が当てはまる場合、私は助ける方法が本当にわかりません-何かが信じられないほど間違っているので、どこから見ればよいのかわかりません。
#2の場合、サーバーからすべての静的アセット(画像、js、css、フォント)を提供していると思います。これらをCDNに配置することをお勧めしますが、本当にそれができない場合は、非常に長いキャッシュ時間を設定してVarnishをオンに戻すことができます。 PHPと他のホスト全体で静的ファイルを提供するためだけにApacheプロセスを使用している場合、リソースを無駄にしていることになります。もっと簡単な方法でそれを実行してください!
私の問題は、CPU(すべてのコア)の負荷が高いことです。ほとんどの場合、90%から100%の負荷に達しています。問題のプロセスはApache2です。
これは定数ですか、それともリクエストを処理するときだけですか?
ディスクI/Oはどのように見えますか(iostat -mhx 2
)? MySQLは何をしていますか(show processlist;
)?
あなたのサーバーはあなたが説明したものに対して非常に強力です。これは、この問題を修正できるはずなので、朗報です。
私は同じ問題に直面しました。 Webコンテンツをローカルマシンにダウンロードし、更新されたアンチウイルスでコンテンツをスキャンします。私の場合、犯人はトロイの木馬ウイルスです。 Webコンテンツのウイルスを駆除した後、私の問題は解決しました。