2012-03-13 16 views
1

私は多くのapacheのsleepスクリプトに問題があります。私は、apacheを開始し、13GBの空きメモリにキャッシュメモリをクリアしている間、空きメモリはまだapに落ちる。 100MBの無料。多くのPHPプロセスはスリープ状態になり、キャッシュされたメモリを保持します。 1つのスクリプトで19 MB。Apacheのメモリの問題

いつかスリープスクリプトはメモリから700MBも確保します。いくつかの設定は、どのようにスクリプトの終了時にApacheに指示してから終了するか?

+0

無料メモリは未使用と失われたメモリである。カーネル例えば、ファイルシステムキャッシュのためにRAMを使用しています... –

+0

問題は、その睡眠のproce ssisはまだ成長している、ap。空きメモリが100MBになると、実際に未使用のメモリが多くても、システムはディスクからスワップすることになります。 – user1173536

+0

phpは長寿命のアプリケーションにはあまり適していませんが、可能です。だから、これは特定のメモリリークPHPコードのより多くの問題です。 Apache/phpは、スクリプトが終了したときに使用されたすべてのメモリを解放しなければなりません。 – kirilloid

答えて

0

んが、あなたの問題ではないあなたがは、Apache上でスクリプトを眠る使用していることを「apacheの上多くのスリープスクリプトとのは」、ではありません。スリーピングは、ステートレスなHTTP(S)ベースのWeb要求を受信して​​応答するという、1つの目的を念頭に置いて設計されたほとんどのWebサーバーにとっては困惑です。

睡眠、自体は、絶対的な悪ではなく、全体の遅延が数秒以上であれば、あなたは間違って何か非常にを行っている、とあなたは別のアプローチを探求する必要があります。

たとえば、phpBBは、Web要求がキューに登録されたリクエストテーブルと共通のチェック機能を使用して、将来の作業アクティビティを(たとえば、1時間ごとにアプリケーション関連のテーブルメンテナンスに)スケジュールする擬似クーロンタイプの機能を実装します。スケジュールされたタスクが期限切れの場合、1ピクセルの画像要求を使用して、アクティビティの非同期コールバックが生成されます。 (画像負荷を実行して、この要求がなおそれをトリガURIから分離される。

別のアプローチは、このキューに入れられた要求テーブルにサービスを提供するために独立したデーモンまたはクーロンジョブを使用する変異体である。

別のアプローチは、単にその後、フォーク自体をdaemoniseとApacheのワーカープロセスから切り離すために子プロセスを実行する。

、別のアプローチ...(free` `によって報告されるように)

1

Apacheで動作するPHPのリソースと制限時間は、php.iniによって制御されます
これらの2つの設定は自己説明です。

max_execution_time = 30 
memory_limit = 128M 

私はスクリプトが永遠に眠り、あなたの記憶を枯渇させるとは思わない。
これらの設定を最初に確認してください。

+0

私は2048にmemory_limitを設定しました。なぜなら、多くのスクリプトがハード操作を行い、max_execution_timeが1000000であるからです。 – user1173536

+2

その後、PHPで実行されるPHPはあなたのニーズに合っていません。あなたは他のアプローチを考慮する必要があります。 – Magic