2010-12-06 2 views
2

100,000 개의 100,000 메시지를 생성하는 5 명의 생산자와 함께 jboss 메시징 설치를로드 테스트하고 있습니다. 중요한 병목 현상이 발생합니다. 프로파일 러를 모니터링 할 때 WorkerThread #이라는 15 개의 스레드가 있음을 알 수 있습니다. 이 스레드는 대기없이 100 % 할당됩니다. 나는 그들이 관련 될 수 있다고 생각한다. 누구든지 이러한 스레드 서비스 기능 및 스레드 풀 설정이 있는지를 알고 있습니까? 나는 좌약Jboss Messaging WorkerThread #이 스레드는 무엇입니까?

제이보스 엔터프라이즈 애플리케이션 서버 4.3 CP08
제이보스 엔터프라이즈 서비스 버스 4.4 CP04
JBoss의 거래를 사용하고 4.2.3._CP07
J 보스 메시징 1.4.0.SP3-CP09
보스 규칙 4.0.7
제이보스 jBPM을 3.2.9
제이보스 웹 서비스 2.0.1.SP2_CP07

+0

각각 100,000 개의 메시지를 100,000 개 생성하는 경우 풀 스로틀에서 여러 스레드가 작동하는 것에 대해 놀란 이유는 무엇입니까? 확실히 이것은 좋은 일입니다. – skaffman

+0

예. 하지만 내 하드웨어는 최소한 도청되지 않습니다. 서버가 유휴 상태 일 때 할당량이 0 % 인 경우 서버가 3 개 뿐이므로 풀이되어야하며 100 %로 15로 점프합니다. 그러면 내 반응 시간이 술 먹는 사람 아래로 내려갑니다. 나는 수영장을 두드리는 것처럼 보입니다. 풀에 더 많은 스레드가있는 bencmark를 실행하고 싶습니다. – nsfyn55

답변

2

알아 냈습니다. 스레드 풀이 아닙니다. Jboss Messaging의 원격 커넥터를 정의하는 jboss-messaging.sar/remoting-bisocket.xml 파일에서 주로 clientMaxPool, maxPoolSize, numAcceptThreads 값을 볼 수 있습니다.

리모컨에서 소켓이 설정되면 "numAcceptThreads"값까지 해당 소켓을 모니터링하기 위해 스레드가 만들어집니다. 이 모든 스레드는 소켓에서 데이터를 읽어서 클라이언트 풀 (maxPoolSize에 의해 관리 됨)의 스레드에 전달합니다.

workerThread # []라는 스레드는 수락 스레드를 나타냅니다. 더 많은 제작자를 만들면 더 많이 볼 수있는 이유는 Jboss Messaging의 bisocket 전송에 3 개의 소켓이 만들어 졌기 때문입니다. 처음에는 3 개가 있지만, 5 개의 생산자를 만들면 그 수가 15 개 (또는 수학적으로 기울어지지 않은 사람들은 5 * 3) 증가합니다. 100 % 할당 된 이유는 소켓에서 읽은 모든 메시지를 서버 스레드로 전달할 때 소켓에서 읽는 것으로 돌아갑니다 (이 위치는 항상 데이터입니다).

대답은 이러한 스레드를 제어 할 수있는 풀이 없다는 것입니다. 하나 이상의 스레드를 수락 할 수 있지만 거의 이해할 수 없습니다. 이것은 작업이 너무 적어서 데이터를 읽거나, 데이터를 읽거나, 데이터를 읽지 않기 때문에 ... 더 많은 스레드가 동기화 오버 헤드를 추가하게됩니다.

-1

http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html에서이다; 도움이되기를 바랍니다.

스윙 프로그램이 장기 실행 작업을 실행해야하는 경우 대개 백그라운드 스레드라고도하는 작업자 스레드 중 하나를 사용합니다. 작업 스레드에서 실행되는 각 태스크는 javax.swing.SwingWorker의 인스턴스로 표시됩니다. SwingWorker 자체는 추상 클래스입니다. SwingWorker 객체를 만들려면 하위 클래스를 정의해야합니다. 익명의 내부 클래스는 매우 간단한 SwingWorker 객체를 만드는 데 종종 유용합니다.

+0

그게 분명히 다릅니다. 아래 답변을 참조하십시오. – nsfyn55

관련 문제