1

PHP で exec コマンドを実行するたびに JVM が起動することによる遅延を回避する方法はありますか?

PHP を使用して実行する必要がある暗号化と復号化用の 2 つの JAR があります。どちらも同じスクリプトで実行されますが、一方は URL パラメーターを復号化し、もう一方はその他の情報を暗号化します。コマンドラインからそれらを実行すると、どちらもそれぞれ 0.4 秒未満で終了します。ただし、PHP exec 関数を使用してそれらを実行すると、JVM の新しいインスタンスが開始され、各 JAR 実行時間に 5 秒が追加されます。

Nailgun を使用して調査しましたが、機能しません。JARを実行するためのドキュメントが見つかりません。クラスを使用すると、それらも見つかりません。

PHP/Java Bridge の使用も検討しました。ただし、引き続き exec を使用したいと思います。既に IIS 7.5 を実行していますが、これを使用するためにブリッジを構成する方法がわかりません。

私の質問は次のとおり
です。PHP exec 関数が毎回新しいインスタンスを開始する必要がないように、JVM をバックグラウンドで実行し続ける方法はありますか? コマンドラインで遅延がないので、方法があるに違いないと思います。

これを行う方法がない場合は、他の提案を受け入れます。PHP スクリプトの実行に 11 秒かかるということは、Web サイトへの訪問者が離脱する可能性が最も高いことを意味します。

役に立つかもしれないし、役に立たないかもしれない追加情報:
Windows Server 2008 R2 32 ビット OS で実行されます。
ローカル アクセスのみが必要です。
IIS サーバー 7.5 が使用されています。
Web サイトは PHP でコーディングされています。PHP のバージョンは 5.3.5 です。
サーバーは最新の JRE - Java7 u6 を実行しています

4

2 に答える 2

2

PHP exec 関数が毎回新しいインスタンスを開始する必要がないように、JVM をバックグラウンドで実行し続ける方法はありますか?

既知のポートで ServerSocket を開始できます。

アプリケーションが初めて実行された場合、これは成功し、このプロセスは実行し続けることができます。

これが成功しない場合、アプリケーションはそのポートでソケットを開き、必要に応じてコマンドを送信して応答を取得できます。

于 2012-08-30T09:52:29.087 に答える
0

受け入れられた回答で問題はほとんど解決されましたが、JAR の実行時間はまだ少し長すぎました。この質問は特に JVM の起動時間を扱っていることは承知していますが、他の誰かが同様の問題を抱えている場合は、これも役立つかもしれません。

私は Eclipse を使用して実行可能な JAR を生成していました。サードパーティの JAR を JAR 内に詰め込んでいました。生成された JAR を調べたところ、Eclipse が多くの独自のクラスを追加していることに気付きました。そのうちの 1 つはメイン クラスとしてマニフェストに含まれていました (JAR 内での JAR のロードを扱っていたと思います)。また、JAR 内のすべてのファイルが圧縮されていることにも気付きました (アーカイブで予想されるように)。

私の JAR はサーバー マシンにとどまり、ネットワーク経由で転送されることはないため、解凍は簡単に回避できる追加のオーバーヘッドであると考えました。

上記の情報に基づいて、JAR に 3 つの簡単な変更を加えることにしました。

1)コマンド ラインで Java コマンドを使用して JAR を生成し、独自のマニフェストを記述します。これにより、Eclipse によって追加されていた追加のクラス ファイルが削除されました。

2)コマンドラインから JAR を生成する際に、圧縮を無効にする 0 オプションを追加しました。

3) JAR アーカイブにサードパーティの JAR を含めませんでした。代わりに、それらを同じフォルダーに含め、生成された各 JAR マニフェスト ファイルのクラスパス オプションに追加しました。

これにより、JAR の実行にかかる時間が最大 269% 短縮されました。

于 2012-09-19T10:07:22.090 に答える