2012-01-11 16 views
1

まず、DrupalをCMSとして使用していて、別のDrupal stackexchangeサイトがあることを知っています。しかし、私の問題はDrupal特有の問題ではなく、ユーザーレベルまたは上級ユーザーレベルではありません。それはPHPとサーバーに関連しています。今問題はOKです。PHPアプリケーションのパフォーマンス

まだ起動していないウェブサイトを開発しました。メモリエラーからランダムに抜け出しています。そして時にはサーバーがクラッシュすることもあります。再起動に役立ちます。他の人がアプリケーションを使用しているので重い負荷はありません。分科会は個人ページの上限を超えています。私はいくつかの一般的なことを試みました - PHPのメモリ制限を増減する、エラーログを調べる、遅いMySQLクエリを記録する。何もない...同じ。

私は 'top' linuxコマンドを実行しました。ブラウザの要求に応じて、4-5個のプロセスがあります。どのMEMの使用率(%)が10,5,4,3,0,5であるか。 2つのプロセスが10時間以上実行されています。 Apacheを再起動した後、私は+ 40%の空きメモリを得ました。

私にはいくつかの質問と謎があります。

  1. ブラウザからのアクティブなリクエストがない場合、2つのプロセスが長時間実行されるのはなぜですか?どうすればそれらを防ぐことができますか?
  2. 10 + 5 + 4 + 3 + 0.5のメモリをApacheで使用していたときに、再起動後に+ 40%の空きメモリが得られたのはなぜですか?これは同じではありませんか?
  3. これはメモリリークですか?どうすればそれらを検出できますか?
  4. 高レベルから低レベルにステップダウンするためにどのようなテクニックを使用する必要がありますか?私の機能の1つに「メモリリーク」があるとしたら、アプリケーション全体をどのようにすればいいですか?
  5. メモリとCPUの使用に関する特定の機能をどのようにベンチマークできますか?
  6. なぜサーバーがクラッシュするのですか?基本的なhttpdの再起動さえも "fork:メモリを割り当てることができません"を返しています。これはメモリリークの症状ですか?

1点ごとに回答してください。

+0

パフォーマンスに焦点を当てたモジュールを使用していますか?(例:[このリスト](http://drupal.org/project/modules?filters=tid%3A123%20drupal_core%3A103%20bs_project_sandbox%3A0&solrsort=sis_project_release_usage%20desc ))?プロファイラを使用すると何が表示されますか?あなたは、いくつかの珍しいタスクを実行しますか?自分のモジュールで(すべてのリクエストでメニューを再構築するなど)?キャッシュを使用していますか? – Tadeck

+0

まだパフォーマンスモジュールは使用していません。それは開発の問題ではありません、はい?プロダクションで確実に使用する必要があります。私はすべてのリクエストに影響するカスタムコードをいくつか持っていますが、重いものはほとんどないと確信しています。 –

+2

いくつかのプロファイリングモジュールを使用して、実行された関数および/またはデータベースクエリと、メモリ使用量および実行に要した時間をリストすることができます。問題を絞り込むことができます。このカスタムコードについては、間違っているかもしれませんが、それはすべて依存しています。例えば。誤って実行された場合、メニューを修正することは、いくつかの主要なパフォーマンスヒットになる可能性があります。 – Tadeck

答えて

1

GDのようなものを扱うときに、どこか無限ループやリソースを解放しているような音がします。

フリー・ラムがある間、Linuxは物事をRAMに保持します.RAMの別のプロセスからの突然の必要性があり、ラムが使用中でない場合、Linuxは必要なアプリケーションに対してフリー/スワップします。 「空き」の出力を確認すると、キャッシュされているだけでなく、いつでも解放できるキャッシュされた列が表示されます。

+0

OK、たとえばGDに問題がありますが、それについてはわかりません。問題はGDでどのようにデバッグして理解する必要がありますか?そんなことをどうやってやっているの? –

+1

PHPは、通常、メモリ不足で実行された行を返します。そこから始めて、メモリブロックを見つけるまで、コードのブロックをコメントとして処理します。あなたは@kidataで述べたようにxdebugを使うことができましたが、どこから始めたらいいのか分かりませんでした。実際の開発者はデバッガ*(ジョーク)を使用しません。* – Geoffrey

+0

GD関数で何か問題があると思われます。 D –

関連する問題