[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12533] Re: Java Concurrency In Practice 第 4 回議 事録
高橋(徹)です。
> 6.1.3 Disadvantages of unbounded thread creation
>
> OSの設定で、スレッド数上限の規定あり
> (プロセスあたりのスレッド数)
>
> Linux 2.4だと、スレッド数はID上限で8192に壁あり
OS毎に生成できる最大スレッド数の設定があるかと思いますが、
現在見つけることが出来ていません。
> 宿題)各自自分のマシンで最大スレッド数を調べてみよう
スレッドを同時にいくつ起動できるか、実験コードで試してみました。
(実験コードは添付ファイルにしています)
(1) Windows XP Sun JDK 5.0 Update9 最大7117スレッド
(2) Solaris 10 x86 Sun JDK 5.0 Update7 最大11200スレッド
(3) CentOS 4.4 Sun JDK 5.0 Update9 最大5527スレッド
いずれもスレッド数を超過すると次のエラーが発生しました。
OutOfMemoryError: unable to create new native thread
JVMのメモリ関連パラメータとして、-Xmx, -Xssを変更してみたものの
いじれば最大スレッド数がかえって低下したので、各OSでのデフォルト
設定のまま実行しています。
Solaris OSが予想通り群を抜いて最大スレッド数の許容量が多い
ようです。
(2) Solaris 10でのスレッド数と使用メモリ(SIZE:仮想、RSS:物理)
9000 10000 11000 11200
SIZE 236M 256M 256M 262M
RSS 164M 183M 183M 189M
(3)CentOS4.4でのスレッド数と使用メモリ(VIRT:仮想、RES:物理)
1024 2048 4096 5120 5527
VIRT 777m 1297m 2337m 2856m 3063m
RES 53m 53m 87m 104m 127m
--
TAKAHASHI,Toru
torutk@xxxxxxxxxxxx
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.BrokenBarrierException;
public class UnboundThreadCreator3 {
public static final void main(final String[] args) {
int numThreads = Integer.parseInt(args[0]);
System.out.println("Number of Thread = " + numThreads);
final CyclicBarrier barrier = new CyclicBarrier(numThreads);
for (int i=0; i<numThreads; i++) {
Thread thread = new Thread(new Runnable() {
public void run() {
int count = 10;
while (count > 0) {
try {
count--;
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
}
try {
barrier.await();
} catch (InterruptedException e) {
System.err.println("Interrupted when awaiting");
} catch (BrokenBarrierException e) {
System.err.println("Broken barrier when awaiting");
}
}
}
);
thread.start();
}
}
}