私の質問は、JVMは、スレッドまたはプロセスに関連するある種のリソースを共有しており、通常の使用で1か月以上経過するとProcessBuilderのパフォーマンスが急上昇する可能性があるということです。すべてのアプリにjava6update21を使用します。
過去数か月の間に、データセンター内の単一のサーバー(Solaris10を実行しているSparcM4000)は、問題なく約6〜8週間稼働できることに気付きました。ただし、すぐに、ProcessBuilderクラスを使用してスクリプトを実行するアプリケーションのパフォーマンスは、パフォーマンスに大きな打撃を与えます。ProcessBuilder.startが戻るまでに1分以上かかる場合があります。再起動後、およびその後数週間、通常の戻り時間は10秒またはおそらく100ミリ秒の範囲です。
5つのスレッドを作成する個別の小さなアプリケーションを作成し、各スレッドはProcessBuilderを使用して「ls」コマンドを10回連続して実行し、元の問題を監視するためにそこから統計を収集します。このアプリケーションは実行のたびに終了し、cronから1時間に1回だけ実行されます。通常、1〜2秒しかかかりません。
昨夜、45日間の稼働時間と通常の動作の後、ProcessBuilderの時間はProcessBuilder.startの呼び出しごとに1分以上に急上昇しました。
上はメモリやCPUの占有を示していません。テストアプリでjstackを実行しようとしましたが、「スレッド_dbエージェントを作成できません」というエラーが発生しました。
何か案は?