Javaは、単一のマルチスレッドプロセスモデルである、複数のスレッドは、依然として、マルチコア(コア)/マルチ・プロセッサ(CPU)を最大限に活用することができ
- 同時に単一のCPUスレッドが唯一のスレッドで単一のコマンドを実行することができます
- シングルスレッドは、単一のCPUスレッドで実行することができます
- JavaのJVMプロセスのすべてのスレッドは、CPUスケジューリングは、スレッドのプロセスであり、
- Javaのマルチスレッドは、それがマルチスレッドと呼ばれる複数のCPUのスレッド数によるものではない(シングルCPU単核ハイパースレッディングを使用していない、あなたはまだ、マルチスレッドのJavaを達成することができますが、すべてのスレッドがシングルスレッドのOSで実行されています)、スレッドの数がスレッドの他のスレッドのJava CPUの数よりも大きい場合、オペレーティング・システムは、同時実行のためのラウンドロビン(RR)スケジューリングアルゴリズム、頻繁なコンテキスト切り替えを、使用します
- デフォルトでは、オペレーティングシステムごとにスレッドを作成するためのJavaはスタック領域の1Mを割り当てます
CPUは、CPUの命令実行時間は、ナノ秒レベル(1.6G CPUが命令を実行するために、0.6ns程度かかり)、コンテキストスイッチのCPUであり、基本的な指示操作を認識することができるJavaコードのコンパイルシステムの後に実行されており、Javaプログラムを実行します私たちは20000のCPUの期間を必要とします
/proc/sys/kernel/thread-max 系统可以生成最大线程数量 /proc/sys/kernel/pid_max 增大,线程数量增大,pid_max有最高值,超过之后不再改变,而且32,64位也不一样
JVM設定ビュー
フラグを参照するためのオプションがあります。
jinfo -flags pid
各コンフィギュレーションの表示JVM値
jinfo -flag ThreadStackSize pid
スレッド数を設定します。
- 経験:スレッド数、サーバ* 2 + 1
- 計算集約的なスレッドの数、作成したプロセッサコアの数=
- もし時間がかかり、操作IOを状況に応じてスレッドの数を調整し、この時点でスレッドの数= N *プロセッサコアの数
スレッドの数に等しいが、スレッドの数は、スレッドのプログラムだけでなく、過剰な数のためでも影響を受けるスレッド間で頻繁に切り替え、特定のニーズの、パフォーマンスを改善しないCPUをうまく利用することができ、一般的な手順を2〜3回、CPUビジネス・テスト・スレッド処理に応じてわずかに常に現在のシステム内のスレッドの最適な数を決定するために、スレッドの数を調整
查看某个进程的线程栈设置大小 jinfo -flag ThreadStackSize pid
プロセス/スレッドコンテキストを使用すると、多くのCPUを使用することができます切り替えますか?
パフォーマンス分析のためのツール