web-dev-qa-db-ja.com

ApacheとmySQLで大きなメモリの問題をトラブルシューティングする方法

私はサーバーを最適化するためにこのウェブサイトをたくさん読みましたが、実際には何も役に立ちませんでした:(私はメモリの問題を抱えていると思います、私は月に86万ページビューのウェブサイト(Drupal)を1つしか持っていませんが、トラフィックが増えると負荷がかかります平均は+ 40、+ 70などを超え、メモリ使用量が100%になると、サーバーが完全にダウンします。

実際、サーバーを再起動したばかりの場合、合計メモリ使用量は約80%です。

どうしたらいいのかわからない!このサーバーがこの種のトラフィックを処理できないとは本当に信じられません。助けてください!

スペック

Processor #1 to #24 
Intel Dual Xeon E5645 @ 2.40GHz
Cache 12288 KB
4GB Total RAM
Apache/2.2.19 -prefork- (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4  PHP/5.2.17
500GB HD RAID 1
Drupal based website with Boost module and Cache Router (INNODB tables)
APC Installed

トップ(シフト-m)

top - 23:05:37 up 19:42,  1 user,  load average: 0.78, 0.74, 0.64
Tasks: 527 total,   1 running, 524 sleeping,   0 stopped,   2 zombie
Cpu(s):  1.7%us,  0.3%sy,  0.0%ni, 97.9%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4034276k total,  3774668k used,   259608k free,   279060k buffers
Swap:  6088624k total,   103616k used,  5985008k free,  1316080k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
 8768 mysql     15   0 1211m 880m 4784 S 12.0 22.4  20:43.44 mysqld                                        
20475 nobody    16   0  429m 176m  27m S  0.0  4.5   0:00.44 httpd                                         
20846 nobody    15   0  427m 176m  28m S  1.0  4.5   0:01.13 httpd                                         
20775 nobody    15   0  422m 171m  29m S  0.0  4.4   0:01.22 httpd                                         
20826 nobody    15   0  422m 171m  29m S  0.7  4.4   0:01.00 httpd                                         
20827 nobody    15   0  423m 171m  28m S  0.7  4.4   0:00.61 httpd                                         
20578 nobody    15   0  422m 171m  29m S  0.0  4.3   0:01.73 httpd                                         
20833 nobody    15   0  422m 170m  28m S  0.0  4.3   0:00.84 httpd                                         
20830 nobody    15   0  421m 170m  28m S  0.0  4.3   0:00.84 httpd                                         
20681 nobody    15   0  422m 170m  28m S  1.0  4.3   0:00.93 httpd                                         
20913 nobody    15   0  422m 170m  27m S  0.0  4.3   0:00.34 httpd                                         
20914 nobody    15   0  422m 169m  27m S  0.0  4.3   0:00.60 httpd                                         
20854 nobody    15   0  423m 167m  23m S  0.0  4.2   0:00.36 httpd                                         
20911 nobody    16   0  418m 167m  28m S  0.3  4.2   0:00.70 httpd 

httpd.conf

Timeout 300
TraceEnable On
ServerSignature Off
ServerTokens Full
FileETag All
StartServers 5
<IfModule prefork.c>
MinSpareServers 5
MaxSpareServers 10
</IfModule>
ServerLimit 256
MaxClients 150
MaxRequestsPerChild 800
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

my.cnf

[mysqld]
max_connections = 120
safe-show-database
skip-locking
key_buffer = 148M
max_allowed_packet = 14M
table_cache = 596
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 24
query_cache_size= 128M
thread_concurrency = 48
wait_timeout = 45
innodb_file_per_table
innodb_log_file_size = 10485760
open_files_limit = 8192
tmp_table_size=200M
max_heap_table_size=200M
innodb_buffer_pool_size=596M
local-infile=1
log_slow_queries = /var/log/slow.log
long_query_time = 3

[mysqldump]
quick
max_allowed_packet = 16M

[mysqld_safe]
log-error=/var/log/mysqld.log

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M

いくつかのグラフ(今週)

更新:

  • インストールされているApacheモジュール
  • /etc/init.d/httpd-Mそしてこれらの結果を得たdpaste.com/hold/615665
  • /etc/init.d/httpd-lの結果dpaste.com/hold/615667
  • PHP.inihttp://dl.dropbox.com/u/33784/info.html

サーバー負荷が200を超えるトップ

top - 12:27:13 up 5 days,  9:04,  1 user,  load average: 219.36, 189.93, 130.56
Tasks: 750 total,   1 running, 749 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  1.0%sy,  0.1%ni, 49.7%id, 47.8%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   4034276k total,  4014052k used,    20224k free,    13404k buffers
Swap:  6088624k total,  3036872k used,  3051752k free,    71272k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
15653 mysql     15   0 1444m 154m 3384 S  0.0  3.9 192:42.76 mysqld                                        
23800 nobody    16   0  422m  96m  29m D  0.3  2.4   0:06.96 httpd                                         
23527 nobody    16   0  422m  93m  29m D  0.0  2.4   0:05.11 httpd                                         
23759 nobody    15   0  421m  91m  26m S  0.7  2.3   0:03.97 httpd                                         
23842 nobody    16   0  422m  91m  26m D  0.3  2.3   0:04.88 httpd                                         
23819 nobody    16   0  421m  91m  26m D  0.3  2.3   0:07.11 httpd                                         
23739 nobody    16   0  421m  91m  26m D  0.0  2.3   0:10.27 httpd                                         
23778 nobody    15   0  421m  91m  26m S  0.0  2.3   0:04.81 httpd                                         
23790 nobody    15   0  421m  91m  26m S  0.0  2.3   0:03.86 httpd                                         
23754 nobody    16   0  421m  91m  26m D  0.0  2.3   0:08.19 httpd                                         
23700 nobody    16   0  421m  90m  26m D  0.3  2.3   0:05.45 httpd                                         
23843 nobody    16   0  420m  90m  26m S  0.0  2.3   0:06.39 httpd                                         
23510 nobody    16   0  426m  90m  24m D  0.0  2.3   0:04.98 httpd                                         
23841 nobody    16   0  416m  89m  29m D  0.0  2.3   0:03.53 httpd                                         
23836 nobody    15   0  414m  89m  30m S  0.0  2.3   0:05.82 httpd                                         
23849 nobody    15   0  418m  88m  25m S  0.0  2.3   0:05.78 httpd                                         
23833 nobody    16   0  429m  88m  24m D  0.0  2.3   0:05.59 httpd                                         
23832 nobody    16   0  418m  88m  25m S  0.0  2.2   0:09.25 httpd                                         
23746 nobody    16   0  428m  88m  25m D  0.0  2.2   0:04.13 httpd                                         
23851 nobody    16   0  428m  88m  24m D  0.0  2.2   0:03.60 httpd                                         
23816 nobody    15   0  418m  88m  25m S  0.0  2.2   0:07.00 httpd                                         
23282 nobody    15   0  416m  87m  28m S  0.0  2.2   0:11.29 httpd                                         
23742 nobody    15   0  416m  86m  26m S  0.0  2.2   0:09.37 httpd                                         
23837 nobody    16   0  425m  86m  25m D  0.3  2.2   0:05.20 httpd                                         
23093 nobody    16   0  430m  86m  24m D  0.0  2.2   0:04.19 httpd                                         
23732 nobody    16   0  421m  86m  24m D  0.0  2.2   0:05.55 httpd                                         
23772 nobody    15   0  415m  85m  29m S  1.0  2.2   0:14.55 httpd   

誰かがApache設定を微調整するのを手伝ってくれましたが、すべて同じように見えます

メモリの問題に役立つパイプロギングを有効にしました。また、Apacheプロセスがメモリを循環する前に実行するリクエストの量を短縮しました。

私は本当にあなたの助けに感謝します、私はほとんどすべてを試しました、私は実際にはシステム管理者ではありませんが、私たちは今私たちを助ける人がいません。

ありがとうございました!

3
atom

何だと思いますか?

mod_securityモジュールがメモリの問題の原因でした。それを無効にすると、すべてのhttpdプロセスが180から35mbになりました。

それは最初から私のホスティングプロバイダーによってインストールされ、構成されました、今私は他の方法でセキュリティを強化するか、それを適切に構成する必要があります。

1
atom

一般的な経験則-

サーバーに負荷がかかっているときに次のコマンドを実行します。

ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'

これにより、Apacheプロセスのおおよその平均サイズがわかります。

これは専用のWebノードではないため、RAMの60%がApacheで使用可能であるとします。

4096 * .60/AVERAGE_SIZE_HTTPD_PROCESS =おおよそサービスできるMaxClients /リクエストの数。一般的にあなたの平均は約170MBのように見えるので...

一度に14のリクエストを処理できます。 MaxClientsを20〜25などのより妥当な数に減らします。

乾杯

6
HTTP500

CacheRouterモジュールが必要ですか?何度もそれは私に同様の問題を引き起こしました。これはメモリを大量に消費し(少なくともmemcachedで使用した場合)、正しく構成されていないと、サイトが非常に遅くなる可能性があります。

あなたが説明したトラフィックで、私はあなたが実際にCacheRouterなしで非常にうまく生きることができると思います、しかしブーストは便利です。 CacheRouterがないと、Apacheのメモリ使用量が大幅に減少し、サーバーに余裕を持たせることができます。また、memcached PHPモジュールを使用している場合は、無効にします。Apacheが大量のメモリを消費しているようです。

また、Apacheの設定がおかしいです。

  • TimeOut 300はやりすぎです。 10から30の間の何かにそれを落としてください。
  • TraceEnable On?どうして?
  • 時々 KeepAlive On善を行うよりも害を及ぼす可能性があります。あなたはそれなしで試しましたか?
0

この特定の問題に対する答えではありませんが、これは私が同様の問題を解決しようとしたときに見つけ続けたページでした。だから別のランプ管理者を助けることを望んで....

私の場合、私の問題はPHPのget_browser()コマンドでした。 browscap.ini(標準バージョン)をインストールした後、Apacheプロセスのメモリ使用量は10Mbから170Mbになりました。私が突然活動のピークを迎えるまで、これはうまくいきました。 browscap.iniのLiteバージョンに変更すると、より許容できる10MBに戻ります。

0
MortimerCat