問題タブ [preforking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP readfile() が終了せず、Apache サーバーがハングする
Apache サーバー、php アプリに大きな問題があります。
サーバーは、php で実行されている非常にトラフィックの多い Web サイトにサービスを提供しています。
24 時間または 48 時間ごとに apache がハングし、Web サイトに再びアクセスできるように再起動する必要があります。apache が許可されているプロセス/サーバーの最大数 (私の場合は 16000) に達し、他のプロセスがすべてアクティブであるため、他のプロセスを解放できないため、再起動する必要があります。
このサーバーでホストされている Web サイトは、最後にファイルを提供する php アプリです。ダウンロード サーバーとしましょう。
ファイルは、POST 要求を送信するフォームを介してブラウザーによって要求されます。
問題は、この POST リクエストが終了しないように見えることです (サーバー ステータスの 16000 プロセスのほぼすべてが POST リクエストであることがわかります)。
提供されるファイルは大きなファイル (10M から 2G) であり、php の readfile 関数を使用して提供します (href リンクを提供したくないので、フォーム POST 要求を使用して、ユーザーがファイルの場所を確認できないようにします)。ファイルは私のファイルシステムにあります)。
php readfile を使用する関数は、最後に exit() を使用しても終了しないようです (以下のコード スニペットを参照)。
私はここで、私のphpコードによって引き起こされる終わりのないPOSTリクエストを回避する方法を求めています. ファイルを提供する POST の方法を維持したい。
最初に私のconf:
- Ubuntu サーバー 14.04
- mpm プリフォークを使用した Apache 2.4
- php 5.5.9 (mod php)
- ハードウェア: 128G RAM
私の mpm_prefork.conf ファイル:
私のapache2.confファイル:
私のphp.iniファイル:
私のApacheログファイル:私の問題にとって興味深いものは何もありません
そして私のサーバークラス(問題を引き起こしているコード):
終わりのない POST リクエストを回避する解決策を誰かが持っていますか? 問題を解決できる場合は、php 以外の方法でファイルを提供しても構いません。
重複しないでください。この質問を具体的にするのに十分なコード、conf スニペット、および写真を追加しました:)
docker - docker の下に prefork アプリケーションを移動する
私はプレフォークモデルのサーバーを持っています。つまり、アプリケーションが起動し、ポートにソケットをバインドし、X 回フォークするため、すべての子が同じポートを共有します。
このアプリケーションを docker の下に移植したいと考えています。私の理解では、使いやすさを向上させるために、1 つの Docker インスタンスでサーバーの 1 つだけを実行する必要があります。したがって、プロセスの 5 つのインスタンスを実行したい場合は、5 つの Docker インスタンスをすべて実行して、アプリケーションを 1 回実行する必要があります。私はこれまでのところ正しいですか?
はいの場合、私の問題は、すべての Docker インスタンスをすべて同じポートで実行することは可能ですか?
サービスのポート範囲をマップするリバース プロキシを使用できることに同意しますが、可能であればこれを避けたいと思います。
python - 他のタスク内で作成された Celery のスケジュールされたタスクは、すぐにブローカーに送られません
次のようにセロリタスクをセットアップしています。
それぞれ 30 の同時実行性を持つ 5 つのワーカー (プリフォーク) があります。すべて prefetch_multiplier=1 および -Ofair 引数で実行されています。CELERY_ACKS_LATE=True で redis ブローカーを使用しています
ここで、セロリ ビート スケジュールから Heavy_task(1,2).delay() を呼び出します。タスクは任意の 1 つのワーカーに送られ、作成された 10,000 個のタスクはすべてそのワーカーにのみ存在し、ブローカーには公開されないため、他のワーカーは次のことができます。それらのタスクに取り組みます。ワーカーの prefetch_count は 10,000 まで増加し続けます
元のワーカーのメモリが 90% 近く消費され始めた後にのみ、これらのタスクがブローカーに公開され、他のワーカーに移行されます。ワーカーも OS によって強制終了されることがあるため、私のタスクは redis ブローカーで「未確認」ではないため、永久に失われます。
すべてのタスクで 1 人のワーカーに負担をかけずに、これらの二次タスクをすぐにブローカーに渡すにはどうすればよいですか?
fork - 更新された Ubuntu と pcntl_fork が機能しなくなった (php)
私のサーバーで最近変更されたもの:
dist-upgradeが原因だとほぼ確信しています。(数日前)
新しいユーザーを追加し、var/www/html/banana にライブラリを追加しました。それもそのせいかも(?) - (2週間前)
- FastCGI のインストールを試みましたが、成功しませんでしたが、通常の処理とフローが中断されることはありませんでした。(2ヶ月前)
通常、フォークを使用して PHP コードから API クエリを実行しますが、ある時点で機能しなくなりました (機能しますが、クエリの結果が重い場合は停止します)。
エラーログ:
実行中のcat /var/mail/root
出力:
誰かが問題をより適切にデバッグして解決するのを手伝ってくれますか?
このスクリプトを実行すると、真の結果が得られます。
編集:フォークせずにサーバー上で同じスクリプトを実行しようとしましたが、すべての結果が正しくなりました(かなり待って、ウェブサイトがしばらく動かなくなった後..)