2016-11-12 6 views
0

私は8GB RAMのサーバーIntel(R)Xeon(R)CPU X3440を持っています。
私はApacheがすべてのRAMを使用していることから、サーバーが応答しなくなることを確認します。ここで
サーバーがダウンするまでにすべてのメモリを使用するApache httpd

は私のApacheの設定です:

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

そして、これは私の自由-mです:

  total  used  free  shared buffers  cached 
Mem:  7859  7725  134   0  189  1566 
-/+ buffers/cache: 5969  1889 
Swap:  4095   61  4034 

そして、これが私のTOPです:

top - 10:19:57 up 23 min, 1 user, load average: 8.08, 6.50, 3.90 
Tasks: 1124 total, 1 running, 1123 sleeping, 0 stopped, 0 zombie 
Cpu(s): 9.8%us, 3.2%sy, 0.1%ni, 60.0%id, 26.2%wa, 0.0%hi, 0.6%si, 0.0%st 
Mem: 8048096k total, 7924168k used, 123928k free, 207920k buffers 
Swap: 4194300k total, 79820k used, 4114480k free, 1460356k cached 

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1921 mysql  20 0 1653m 39m 3428 S 62.7 0.5 6:26.24 mysqld 
7944 apache 20 0 399m 29m 4236 S 6.6 0.4 0:10.13 httpd 
3201 apache 20 0 382m 11m 3880 S 2.3 0.1 0:00.50 httpd 
8030 apache 20 0 382m 10m 3872 S 2.0 0.1 0:00.39 httpd 
2837 apache 20 0 384m 13m 3916 S 1.3 0.2 0:00.37 httpd 
3160 apache 20 0 383m 11m 3908 S 1.3 0.2 0:00.55 httpd 
10555 apache 20 0 382m 11m 3884 S 1.3 0.1 0:00.48 httpd 
13626 apache 20 0 381m 10m 3828 S 1.3 0.1 0:00.05 httpd 
13668 apache 20 0 382m 11m 3760 S 1.3 0.1 0:00.16 httpd 
14284 apache 20 0 381m 10m 3712 S 1.3 0.1 0:00.06 httpd 
2848 apache 20 0 382m 11m 3876 S 1.0 0.2 0:00.49 httpd 
5254 apache 20 0 382m 11m 3852 S 1.0 0.1 0:00.25 httpd 
6085 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.26 httpd 
6257 apache 20 0 382m 11m 3876 S 1.0 0.1 0:00.50 httpd 
8067 apache 20 0 380m 9.8m 3732 S 1.0 0.1 0:00.18 httpd 
14314 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.09 httpd 
14328 apache 20 0 380m 9288 3800 S 1.0 0.1 0:00.16 httpd 

だから何ですこの問題を解決することをお勧めしますか?

+0

よく、子プロセスの数を減らしてください。 – arkascha

+0

@arkascha MaxClientsとServerLimitが1000未満の場合、訪問時にサイトが非常に遅くなります。最大20秒間開きます。 –

+0

もしそうなら、あなたのシステムは単に負荷のために十分強力ではないでしょう。 – arkascha

答えて

1

私はちょうど同様の質問Check this linkに答えました。私が提案し何をここにあります:

私はEC2でインスタンスと同様の問題を抱えていたし、ここで私がやったことだと示唆している:

  1. あなたはpreforkのを使用している場合は、次のように入力してモジュールがロードされていることを確認してくださいこれらの2つのコマンド httpd -lsudo httpd -M これらの2つのコマンドのいずれかの結果にプリフォークモジュールがロードされているのが見える場合は、次のステップに進みます。それ以外の場合は、最初にロードしてください。そうしないと、設定を何も変更しないでください。

  2. を実行し、このコマンドはsudo service httpd restartを使用して、Apacheサーバを再起動し、あなたが持っているどのくらいの空きメモリのノートを取る

    x

  3. を大切各httpdプロセスがps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg)/NR;} END {print avg " MB";}'コールを使用している平均的なメモリを検索します。私がしたのは、あとで使用する空きメモリから余分な​​クッションを差し引くことでした。プロセスxごとに使用するメモリ量を介して、その値y

  4. デバイドに空きメモリyの値を呼び出し、それがMaxConnectionsPerChildの値について、あなたはまでそれを微調整できるようにMaxRequestWorkers = y/x

  5. の値になります正しい構成が得られます。それが大きすぎると、プロセスは殺される前にますます多くのメモリを使い続けます。小さすぎると、プロセスが非常に早く消滅し、システムにオーバーヘッドが発生します。私は通常、400010000の間に置きます。

  6. これらのステップのいくつかは、次のリンクの受け入れられた回答から取られています:StackExchange: httpd memory usageあなたがそれらを必要としない場合、モジュールの一部を無効にする方法もあります。

  7. アクセスログを確認してください。誰かがあなたのウェブサイトを攻撃しようとしているかもしれません!

最初に手順1〜5を実行し、問題が解決するかどうかを確認することをお勧めします。

幸運を祈る!

関連する問題