Ubuntu サーバー、実行中の apache2 インスタンスが多すぎて CPU が限界に達しています

Ubuntu サーバー、実行中の apache2 インスタンスが多すぎて CPU が限界に達しています

私はシステム管理には関わっていませんが、サーバーが限界に達しているかどうかは知っています。すべての http リクエストは完了するまでに時間がかかりすぎます。サーバーで実行されている「トップ」プロセスを添付しています。

これは正常ですか? 何が間違っているのでしょうか?

(ご要望があれば、さらにファイルを貼り付けることもできます。)

このサーバーはテスト目的であり、現時点でアクセスできるユーザーは私だけであることに注意してください。

「top」を実行するとApacheプロセスが多すぎると表示される

また、これは私の apache2.conf ファイルです:

PidFile ${APACHE_PID_FILE}

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 5

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>


<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

DefaultType None

HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

Include mods-enabled/*.load
Include mods-enabled/*.conf

Include ports.conf

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Include conf.d/

Include sites-enabled/

これは server-status の出力です:

Apache Server Status for localhost

Server Version: Apache/2.2.22 (Debian) PHP/5.4.39-0+deb7u2 mod_wsgi/3.3 Python/
    2.7.3
Server Built: Jul 24 2014 15:34:00

-------------------------------------------------------------------------------

Current Time: Tuesday, 23-Jun-2015 11:38:02 BST
Restart Time: Tuesday, 23-Jun-2015 11:33:36 BST
Parent Server Generation: 0
Server uptime: 4 minutes 25 seconds
Total accesses: 54 - Total Traffic: 58 kB
CPU Usage: u25.08 s1.64 cu0 cs0 - 10.1% CPU load
.204 requests/sec - 224 B/second - 1099 B/request
4 requests currently being processed, 3 idle workers

W_WW__..W.......................................................
................................................................
................................................................
................................................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process


Srv   PID  Acc M CPU   SS   Req  Conn Child Slot    Client            VHost                                      Request
0-0  13852 0/4 _ 5.07 2218 90    0.0  0.00  0.00 11.11.11.111 server1.project NULL
           /4
           22/

1-0  13854 22/ W 5.87 2235 0     42.2 0.04  0.04 11.11.11.111 server2.project2   GET /ajax/period_stats/?object_id=16106&period_unit=month&perio
           22

2-0  13855 0/9 _ 4.87 2211 460   0.0  0.00  0.00 11.11.11.111 server1.project NULL
           /9

3-0  13857 0/8 _ 4.54 2218 341   0.0  0.01  0.01 11.11.11.111 server1.project NULL
           /8

4-0  13858 6/6 W 4.61 2224 0     1.6  0.00  0.00 11.11.11.111 server2.project2   GET /ajax/period_stats/?object_id=16110&period_unit=month&perio
           /6

5-0  13878 3/3 W 4.28 2224 0     0.5  0.00  0.00 11.11.11.111 server2.project2   GET /ajax/period_stats/?object_id=16104&period_unit=hour&period
           /3

6-0  13881 0/0 W 0.00 2203 0     0.0  0.00  0.00 11.11.11.111 server2.project2   GET /ajax/period_stats/?object_id=16104&period_unit=hour&period
           /0

7-0  13882 0/2 _ 5.27 2193 12446 0.0  0.00  0.00 11.11.11.111 server1.project NULL
           /2

8-0  13885 0/1 _ 0.01 1086 1     0.0  0.00  0.00 localhost    server1.project GET /server-status HTTP/1.0
           /1

9-0  13886 0/0 W 0.00 0    0     0.0  0.00  0.00 ::1          server1.project GET /server-status HTTP/1.0
           /0

10-0 13887 0/1 _ 5.92 1317 14928 0.0  0.00  0.00 11.11.11.111 server2.project2   POST /core/user/exits/ HTTP/1.1
           /1

11-0 13888 0/1 _ 0.00 62   1     0.0  0.00  0.00 localhost    server1.project GET /server-status HTTP/1.0
           /1

答え1

prefork モジュールを使用しており、サーバーはテスト用だけなので、値を変更できます。RAM が 2GB あることを考えると、もう少し小さい値を設定します。

<IfModule mpm_prefork_module>
    StartServers          2
    MinSpareServers       2
    MaxSpareServers       4
    MaxClients           16
    MaxRequestsPerChild  50
</IfModule>

これらは、あなたのアプリケーションや管理しているデータについてはわからないため「ランダム」な数字ですが、影響を少なくしてテストを行うには十分なはずです。実際に運用を開始して、より多くのユーザーを想定する場合は、その構成を調整する必要があります。

これらの値の説明は Apache のドキュメントで確認できますが、簡単に言うと、prefork MPM を使用すると、Apache はリクエストを処理するためのプロセス プールを作成しますが、推奨される構成ではそのプールは小さくなります。

関連情報