apache-2.2 – ApacheがCPUとメモリを使いすぎる

私はCPUがApache Web Serverでメモリをロードするのに問題を抱えています。

我々は仮想マシン上でUbuntu Server 12.04 LTSを実行しています。私たちのサーバーは以下のスペックを持っています:

> 8GB以上のRAM
> 4 vCPU(12GHz)。

Drupal(7.23)ベースのWebサイトを実行するようにサーバーを構成しました。それで、我々はApache、PHP、MySQLをインストールしました…バージョンは以下の通りです:

> Apache 2.2.22;
> PHP 5.3.10(PHPはApacheモジュールとして動作しています。);
> APC 3.1.7。
> MySQL 5.5.31(すべてのinnodbテーブル)。

私もいくつかのApacheモジュールを実行しています。見てください(apachectl -M):

> core_module(スタティック)
> log_config_module(静的)
> logio_module(静的)
> mpm_prefork_module(静的)
> http_module(静的)
> so_module(静的)
> actions_module(共有)
> alias_module(共有)
> authz_host_module(共有)
> deflate_module(共有)
> dir_module(共有)
> env_module(共有)
> include_module(共有)
> mime_module(共有)
> php5_module(共有)
> proxy_module(共有)
> proxy_http_module(共有)
> reqtimeout_module(共有)
> rewrite_module(共有)
> setenvif_module(共有)
> ssl_module(共有)
> status_module(共有)

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 bla@bla.com
        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モジュール:

> ACL 7.x-1.0
> APC – 代替PHPキャッシュ7.x-1.0-beta4
>ブースト7.x-1.0-beta2
>キャッシュの有効期限7.x-2.0-beta2
> CAPTCHA 7.x-1.0
>カオスツールスイート(ctools)7.x-1.3
>日付7.x-2.6
>ドメインアクセス7.x-3.10
>ドメインブロック7.x-2.0
>ドメインCTools 7.x-1.3
>ドメインロケール7.x-1.0-beta3
>ドメイン分類法7.x-3.x-dev(2012-abr-29)
>ドメインビュー7.x-1.5
>埋め込みビューの表示7.x-1.2
>エンティティAPI 7.x-1.2
>エンティティ参照7.x-1.0
> IMCE 7.x-1.7
> IMCE Mkdir 7.x-1.0
>国際化7.x-1.10
>リンク7.x-1.1
>ローカライゼーションアップデート7.x-1.0-beta3
>メディア7.x-1.3
>メタタグクイック7.x-2.7
>ニュースレター7.x-1.0-beta9
>オプション要素7.x-1.9
>ページスタイル7.x-1.0
>パネル7.x-3.3
>パタウト7.x-1.2
>病理学7.x-2.11
> profile2 7.x-1.3 0-dev(2013-mai-24)
> select_or_other 7.x-2.19
> sheetnode 7.x-1.0-beta4 3-dev(2013-mai-25)
> SMTP認証サポート7.x-1.0
>トークン7.x-1.5
>音訳7.x-3.1
>変数7.x-2.3
>閲覧数7.x〜3.7
>役割ごとの語彙許可7.x-1.0
> Webform 7.x-3.19
> Webform Validation 7.x-1.2
>ワークベンチ7.x-1.2
> workbench_access 7.x-1.2
> workbench_media 7.x-1.1
> workbench_profile 7.x-1.1
> xmlsitemap 7.x-2.0-rc2

私のサイトはシンプルで、多くの訪問者がいません。私は一日に500人のビジターについて話しています。 Drupalはそれほど多くのCPU負荷を引き起こす可能性がありますか?それともモジュール?

他の問題はメモリ使用量です。プロセスが作成されると、80Mがapache2に割り当てられます。多すぎると思います。

私の問題は、CPU(すべてのコア)の負荷が高いことです。ほとんどの場合、90%から100%の負荷がかかります。問題のあるプロセスはapache2です。メモリも哀れみなしに消費されます。合計8GBのうち、消費されるメモリは約6.5GBから7.5GBです。私のapacheの設定が間違っているのか、それとももっとハードウェアが必要なのか私は知りません(私はそうは思いません)。 Drupalは高いCPU負荷を引き起こす可能性がありますか?

CPU負荷が100%に達すると、サイトは停止し、Apacheを再起動する必要があります。私はAPCを使用してBoostをインストールすることでDrupalとの解決策を解決しました。ある程度の効果はありましたが、CPUの負荷はまだ高かったです。すごく高い。

DrupalモジュールやPHPエクステンションなど、もっと情報が必要な場合。私にお知らせください。

ベストアンサー

Other problem is memory usage. When a process is created, 80M is allocated for apache2. I think is too much.

その実メモリですか、それとも仮想メモリですか。正直なところ、それほど重要ではありません。さらに言えば、あなたは「自分が違う」と考えるべきものだけでなく、問題を引き起こしているものを修正することに集中すべきです。

Apacheプロセスのメモリ使用量を減らしたい場合は、モジュールを無効にする必要があります(それぞれのモジュールはメモリ内にある必要があるコードが多いため)。ただし、有効にしたすべてのモジュールが必要な場合は、これで十分です。

メモリに制約のあるマシンを管理するときに使用したアプローチの1つは、特定のタスクをApacheから他のサーバーに移動することでした。そのため、それらを別々に調整できました。

しかし、はるかに単純なアプローチは変更することです

MaxClients           120

ワークロードにとってより合理的なものにします。

If we consider the rewrite accesses and the main site traffic, we have about 70 requests per minute. Right now, we have 33 incoming connections.

一時的にそれに戻りますが、33の同時リクエストを処理するだけであれば、120人の作業員は必要ありません。

MaxClients           40

そして、おそらくMinSpareServersとMaxSpareServerをそれぞれ5と10のように調整する必要があります。 30人の作業員が何もしないで座っている必要はありません。

さて、に戻ります

If we consider the rewrite accesses and the main site traffic, we have about 70 requests per minute. Right now, we have 33 incoming connections.

33の同時リクエストがあっても、1分間に70回しか実行していない場合は、2つの可能性があります。

>あなたの要求は、一回につき約30秒かかります。
>あなたのリクエスト率はそれほど安定していません、そしてほとんどの場合あなたは何もしていません。

#1がそうであるならば、私は本当に助ける方法を知りません – 何かが信じられないほど間違っているので、間違っている私はあなたが探し始めるように言う場所さえ知らない。

それが#2の場合、私はあなたのサーバーからあなたのすべての静的アセット(画像、js、css、フォント)を提供していると思います。これをCDNに入れるのが最善ですが、それができない場合は、非常に長いキャッシュ時間を設定してVarnishをオンに戻すことができます。もしあなたがPHPと一緒にApacheプロセスを使用し、静的ファイルを提供するためだけに他の多くのことをしているのであれば、リソースを無駄にしています。

My problem is that CPU (all cores) have a high load. Most of time, hitting between 90% and 100% load! The offending process is the apache2.

これは定数ですか、それともリクエストを処理しているときだけですか?

ディスクI / Oはどのように見えますか(iostat -mhx 2)? MySQLは何をしていますか(show processlist;)?

あなたのサーバーはあなたが説明したことに対して非常に圧倒的です。それはあなたがこの問題を解決することができるはずであることを意味するので、これは良いニュースです。

転載記事の出典を記入してください: apache-2.2 – ApacheがCPUとメモリを使いすぎる - コードログ