web-dev-qa-db-ja.com

CPU使用率が高く、メモリ使用量が少ない場合、Apacheをどのように調整すればよいですか?

CentOS Webノード(LAMPスタック)でCPU使用率が高く、メモリ使用率が低くなっています。ほぼすべてのプロセスはApacheです。私のCPU使用率が合理的になるまで、追加のWebノードを追加できることはわかっていますが、ここで長い道のりを歩むことができるいくつかのクイックチューニングのヒントがあると思います。

CPUは90-100%の間でバウンスします。 Mysqlは5%から45%の間でバウンスします。残りはApacheが補います。

上:

top - 21:15:49 up 46 days, 20:39,  4 users,  load average: 34.17, 44.62, 51.03
Tasks: 133 total,  32 running, 101 sleeping,   0 stopped,   0 zombie
Cpu(s): 90.4%us,  9.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   8388608k total,  6116448k used,  2272160k free,    84160k buffers
Swap: 16777208k total,       68k used, 16777140k free,  3488044k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15775 mysql     15   0  827m 153m 3712 S 43.7  1.9   0:55.04 mysqld
15911 Apache    16   0  275m  10m 3872 S 24.1  0.1   0:03.15 httpd
15816 Apache    16   0  288m  23m 4116 R 23.5  0.3   0:11.88 httpd
15807 Apache    15   0  281m  17m 5028 S 21.5  0.2   0:11.71 httpd
15897 Apache    16   0  277m  13m 4104 S 21.2  0.2   0:02.68 httpd
15834 Apache    16   0  276m  11m 3916 S 20.6  0.1   0:05.22 httpd
15842 Apache    16   0  275m  11m 4116 S 19.3  0.1   0:07.86 httpd
15870 Apache    16   0  294m  30m 5044 R 17.4  0.4   0:06.36 httpd
15782 Apache    15   0  278m  13m 4124 R 12.2  0.2   0:08.54 httpd
15819 Apache    15   0  280m  17m 5016 S 11.6  0.2   0:07.01 httpd
15683 Apache    16   0  288m  23m 4128 R 10.9  0.3   0:09.90 httpd
15876 Apache    16   0  284m  19m 3880 R 10.6  0.2   0:04.35 httpd
15878 Apache    15   0  276m  11m 4104 S 10.6  0.1   0:06.42 httpd
15913 Apache    16   0  275m  10m 3920 R  9.6  0.1   0:07.98 httpd
15898 Apache    16   0  280m  16m 4104 S  9.3  0.2   0:02.85 httpd
15817 Apache    16   0  277m  13m 4108 S  9.0  0.2   0:05.55 httpd
15843 Apache    16   0  280m  15m 4104 R  8.7  0.2   0:10.80 httpd
15812 Apache    16   0  280m  16m 5012 R  8.0  0.2   0:05.18 httpd
15844 Apache    16   0  281m  16m 4116 R  7.4  0.2   0:08.63 httpd
15833 Apache    16   0  281m  18m 5036 R  7.1  0.2   0:04.76 httpd
15795 Apache    16   0  280m  15m 3920 R  6.8  0.2   0:08.65 httpd
15704 Apache    15   0  280m  16m 4096 S  6.4  0.2   0:09.06 httpd
15849 Apache    16   0  280m  15m 4124 R  6.4  0.2   0:05.59 httpd
15806 Apache    16   0  276m  11m 3876 S  6.1  0.1   0:10.33 httpd
15902 Apache    16   0  280m  15m 3912 R  6.1  0.2   0:03.40 httpd
15688 Apache    16   0  279m  14m 4116 R  5.8  0.2   0:06.07 httpd
15904 Apache    16   0  280m  15m 3860 R  5.8  0.2   0:02.74 httpd
15703 Apache    16   0  281m  17m 5048 R  5.1  0.2   0:03.86 httpd
15705 Apache    16   0  281m  17m 5044 R  4.5  0.2   0:13.54 httpd
15821 Apache    15   0  276m  11m 4072 S  4.5  0.1   0:04.24 httpd
15830 Apache    16   0  278m  13m 4112 R  4.2  0.2   0:06.37 httpd
15850 Apache    16   0  277m  12m 3872 R  3.9  0.2   0:04.64 httpd
15912 Apache    15   0  276m  11m 3920 S  3.9  0.1   0:05.58 httpd
15804 Apache    15   0  280m  15m 3932 R  3.5  0.2   0:09.13 httpd
15805 Apache    16   0  281m  15m 3932 R  3.5  0.2   0:09.00 httpd
15899 Apache    16   0  277m  12m 4104 R  2.6  0.2   0:03.26 httpd
15701 Apache    16   0  277m  12m 3920 R  2.3  0.2   0:08.35 httpd
15781 Apache    15   0  274m 9.8m 3924 S  1.9  0.1   0:10.48 httpd
15848 Apache    15   0  276m  11m 3876 S  1.9  0.1   0:06.63 httpd
15901 Apache    15   0  275m  10m 3916 S  1.9  0.1   0:02.18 httpd
15879 Apache    16   0  280m  16m 4104 R  1.3  0.2   0:02.03 httpd
15820 Apache    16   0  281m  17m 5260 R  1.0  0.2   0:05.24 httpd

関連するhttpd.conf:

Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
8
Ryan

おそらく、mod_phpで実行されている一部のPHPスクリプトはCPU時間を消費します。全体的な推奨事項は一般的であり、それぞれにいくつかの利点があります。

  • APCキャッシュをインストールし、実際に実行されていることを確認します(APCには、APCステータスとキャッシュヒットとミスを示すapc.phpファイルがバンドルされています)
  • Nginxをインストールし、Apacheの前にリバースプロキシとしてインストールします-静的ファイルを提供するオーバーヘッドを削減し、動的コンテンツをサーバーに提供するCPUリソースを大幅に増やします。
  • %t%Tディレクティブを使用してCustomLogをApacheに追加し、ログを調べます。リクエストが最も実行されているため、CPUを最も消費していることがわかります。
  • それらのスクリプトを最適化/書き直す
5