私はcpusの設定された数のライセンスを持っているアプリケーションを持っています。チェックが行われる前にJavaが実行されるCPUの数を1に設定できます。私はSolarisを実行しており、pbind
を見ていましたが、アプリケーションを起動してからpbindを使用すると、Javaが使用できるCPUの数を設定する前にライセンスをチェックしたと考えました。1つのCPUを使用するようにJavaを設定する
Solaris上で設定されたCPU数でアプリケーションを起動する方法を知っている人はいますか?
私はcpusの設定された数のライセンスを持っているアプリケーションを持っています。チェックが行われる前にJavaが実行されるCPUの数を1に設定できます。私はSolarisを実行しており、pbind
を見ていましたが、アプリケーションを起動してからpbindを使用すると、Javaが使用できるCPUの数を設定する前にライセンスをチェックしたと考えました。1つのCPUを使用するようにJavaを設定する
Solaris上で設定されたCPU数でアプリケーションを起動する方法を知っている人はいますか?
グーグルでは、あなたが正しいとわかりました。pbindは、プロセスをプロセッサにバインドします。で
詳細情報と例:http://docs.sun.com/app/docs/doc/816-5166/pbind-1m?a=view
それは、回避策ですが、あなたが利用できる単一のCPUでのゾーンを設定し、そのゾーン内でアプリケーションを実行できるのSolaris 10を使用しました。あなたは完全なアプリケーションを実行せずにテストを行いたい場合は
は、ジャワのこのビットは、最も可能性が高い彼らはCPUの数を取得するために使用しているものです。
Runtime runtime = Runtime.getRuntime();
int nrOfProcessors = runtime.availableProcessors();
完全な例here。
私は、pbindを使用してavailableProcessors()の結果を変更するかどうかを知りたいと思っています。 –
タスクセットはavailableProcessors()の結果を変更します。 –
これは完全な解決策ではありませんが、1つに発展するには十分かもしれません。 java
プロセスが存在する点があり(したがって、pbind
によって制御できる)、プロセッサチェックを行うコードをまだ実行していない点があります。 pbindがその作業を完了するまで、アプリケーション自体の起動を一時停止することができれば、これは正常であるはずです(pbindのアイデアはCPUチェックの観点からはうまくいくと仮定します)。
JVMを適切な場所で間違いなく一時停止する必要がある方法の1つは、リモートデバッガのソケットアタッチとサスペンドモードからの起動です。
-Xdebug -Xrunjdwp:あなたは
java
呼び出しに次の引数を渡す場合は、トランスポート= dt_socketという、アドレス= 8000、その後、JVMが起動した後に一時停止します= Y、サーバー= Y
を一時停止デバッガ/エージェントがポート8000に接続されるまで、メインプロセスを実行します。
したがって、これらのパラメータを使用してバックグラウンドでプログラムを起動するには、ラッパースクリプトを使用することができます。 2番目またはそれ以上の場合は、pbindを使用してプロセッサ数をJavaプロセスのプロセッサ数に設定し、次にaいくつかのエージェントをポート8000にデタッチします(Javaに実行を進めるには十分です)。
このアイデアの欠陥や潜在的な要因は、何らかのノーオペレーションを制御できるかどうかにかかわらず、デバッグモードでの実行がアプリのパフォーマンスに著しく影響するかどうかです(一般的に大きな影響はないようです)。 JDWPエージェントをコマンドラインから起動し、マシン上のポートを開くことができるかどうかを確認します。以前は自動化しようとしたことではありませんでしたが(私は手動でJavaのプロセスを広げてからゆっくりと進化させていましたが)、見落としてしまった問題が他にもあるかもしれません。
あなたの質問に対する最も直接的な答えは、pbindを使用して実行中のシェルプロセスをバインドし、そのシェルからJavaを起動することだと思います。 manページによれば、バインドされたプロセスから作成されたプロセスによってpbindの影響が継承されます。これを試してみてください:
% pbind -b 0 $$
% java ...
ええ、ありがとう、しかし、私の質問には本当に答えることはできません。 –