10

私は wordpress サイトを実行しており、各 PHP プロセスの使用量は約 200mb から 250mb の常駐サイズ メモリです。16GB の RAM では、サーバーは約 70 のプロセスしか処理できません。仮想メモリを 16GB に増やすことで、140 を処理できます。その後、負荷は増加し続けます。10 分間に 200 の接続がある場合、サーバーの負荷は 3Ghz クアッドコア xeon プロセッサで 20 に達します!

すべてのプラグインを非アクティブ化しようとしましたが、これは各プロセスの PHP メモリ使用量を 10% 未満しか削減しません。suPHP は、どのユーザーが大量のメモリを使用しているかを教えてくれますが、wordpress コードのどの部分かは教えてくれません。

メモリ使用量を減らす方法について何か提案はありますか? それとも、32 GB の RAM にアップグレードする唯一のオプションですか?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10585 nobody    16   0 2266m 237m 199m S 21.3  1.5   1:09.17 /usr/bin/php
10597 nobody    16   0 2257m 255m 226m S 15.3  1.6   0:17.56 /usr/bin/php

pmap -d からの最大の出力

000000000e8b8000   27580 rw--- 000000000e8b8000 000:00000   [ anon ]
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
00002b37f2a62000   55108 r---- 0000000000000000 0fd:00000 locale-archive
mapped: 2320852K    writeable/private: 30012K    shared: 2097152K

ipcs出力

------ Semaphore Arrays --------

key        semid      owner      perms      nsems
0x000000a7 0          root      600        1
0x00000000 162529281  nobody    600        1
0x00000000 162562050  nobody    600        1
0x00000000 162594819  nobody    600        1
0x00000000 162627588  nobody    600        1
------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages`
4

2 に答える 2

7

リサが問題を見つけるために行ったことを要約します。

  • を使用して、単一の PHP プロセスのメモリ レイアウトを確認しますpmap -d <pid>。出力は、プロセスによって使用される大量の共有メモリがあることを示しました。
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
  • で共有メモリ領域を調べますipcs -m。ユーザー nobody (Web サーバー) によって作成された共有メモリー領域が多数あることが示されました。ここではその一部を示します。
0x00000000 117964807 nobody 600 2147483648 1 dest 
0x00000000 117997576 nobody 600 2147483648 1 dest 
0x00000000 118030345 nobody 600 2147483648 1 dest
0x00000000 118063114 nobody 600 2147483648 1 dest
  • php.ini で eAccelerator を無効にし、作成された共有メモリ領域を削除します。

for i in `ipcs -m | カット -d'' -f2 | grep '^[0-9]'`; do ipcrm -m $i; 終わり

于 2012-04-27T21:21:09.277 に答える
3

Rasmus Lerdorf は 2010 年に Confoo で PHP のパフォーマンスに関するカンファレンスを行い、Wordpress のブログを例として使用しました。

http://talks.php.net/show/confoo10/1

総括する:

  • phpinfo()使用しない PHP 拡張機能を実行して無効にします。多くのメモリを消費する可能性があります (imagick、curl など)。
  • inclued.so 拡張機能を使用して、インクルードのグラフを生成します。ワードプレスのセットアップで役に立たない関数をロードする可能性があります。
  • でベンチマークを実行しますsiege。小さな最適化がパフォーマンスに大きな影響を与える場合があるため、決定を下すのに役立つ指標があることを確認してください。
  • callgrind を使用して、どこでパフォーマンスが低下しているかを示します。私のプロジェクトの 1 つでmd5()、SQL クエリをハッシュしてキャッシュするために使用していました。md5()CPU 時間の 20% を使用する呼び出し。

可能であれば、PHP拡張機能を無効にすることから始めます。

于 2012-04-27T20:06:11.137 に答える