私はWebServerモジュール上で実行されている種類のプロキシサーバーを持っていて、メモリ消費のためにこのサーバーが強制終了されていることに気付きました。PhantomJSがWebサーバークライアント接続を強制終了しない
サーバーが新しい要求を取得するたびに、それは子クライアントプロセスを作成します。問題は、プロセスが無期限に存続することです。ここで
は、私が使用しているサーバーです:
私はresponse.close()
が閉鎖し、クライアント接続を殺したと思ったが、そうではありません。ここで
はホテルトップに表示される子プロセスのリストです:
(これらのプロセスは、リストの単なる断片である、もっとある)
私は本当にする必要がすべての空きメモリを使用しているため、これらのプロセスを強制終了します。何か不足していますか?
私は単純にサーバーを再起動できますが、メモリは無駄になります。
ありがとう!
編集:私は(check this)思ったように私は前に述べた
プロセスはスレッドなしindependientプロセスです。
すべてのhttp要求で新しいスレッドが作成されますが、これは問題ありませんが、スクリプトが終了してもこのスレッドは強制終了されません。
また、リクエストハンドラがcasper(私はcasper.run(..)を意味する)を実行しないと、新しいスレッドが作成されないことがわかりました。
したがって、新しいスレッドは、サーバーがcasperインスタンスを実行している場合にのみ作成されます。問題は、このインスタンスが実行関数の後に終了しないことです。
私はcasper.done()
を次のように試しましたが、現在実行中のスレッドではなくプロセス全体が終了します。 (私はこの機能のための文書を見いだせなかった)。
同じマシンのサーバー外で他のcasperスクリプトを実行すると、インスタンス化されたスレッドとファントムプロセス全体が正常に終了します。何が起こるでしょうか?
私はPhantom 2.1.1とCasper 1.1.1を使用しています。
詳細または具体的な情報が必要な場合は、私に質問してください。
読んでいただきありがとうございます!
こんにちは、私はこれを試みましたが、私のサーバーを殺します。私はcasper.die()のような他のコマンドも試しましたが、それらのすべてはサーバーを停止して終了します。私は質問を更新しました。 – Alstrat
ローカルに実行された場合、このサーバーをテストするためにあなたはどのURLを使用しますか?これをローカルで実行し、process_request関数のロジックを単純化してcasperを使用していくつかのページを開き、htopで監視するために少し演奏しました。複数のスレッドが開かれているのが見えません。あなたはこの奇妙な振る舞いを見ません。どうすればこのサーバをテストして、あなたが使っているURLを私に提供してください。 –
私はこれを再現できます。それは非常に奇妙なスレッドの多くは、各受信要求で開かれている..サーバーが実際にすぐに失敗します! –