2014-10-11 2 views
0

저는 Java 개발자입니다. 150 명의 동시 사용자가 우리의 애플리케이션에 부딪혔을 때 (프로덕트가 웹 로직 서버에 배포 된) 프로덕션 박스에서 성능을 향상시켜야합니다.12 개의 프로세서가있는 프로덕션 상자에서 구성 할 수있는 스레드 수

프로덕션 시스템은 4 개의 JVM, 2 개의 클러스터로 구성됩니다. 나는 각 JVM에 12 개의 프로세서가 있다는 것을 알았다. (당연히 잘 모르겠다. 박스 당 3 개, 완전히 12 개의 프로세서가있을 수있다.)

현재 우리는 기본 스레드 풀을 사용하는 weblogic에 JEE 응용 프로그램을 배포했습니다. Weblogic 버전은 10.x입니다. 버전 8.1 이후에는 기본 스레드 풀 (작업 관리자)의 스레드 크기를 변경할 수 없다는 것을 알고 있습니다. 우리가 얻는 문제는 20 명의 동시 사용자가 우리 서버에 닿았을 때 우리의 응용 프로그램이 완벽하게 작동한다는 것입니다 (4 개의 JVM). 나는 거기에 8 개의 스레드가 각 JVM에 대해 생성하고 거기에 24 스레드가 동시 사용자 요청 (완전히 4 상자, 그래서 24 스레드) 서비스가 있다고 생각합니다. 그러나 JVM 당 600 개의 요청과 150 개의 요청을 지원해야합니다 (로드 밸런서가 여기에 도움이됩니다). 그러나 문제는 평균 300 ms의 모든 요청을 처리하는 데 8000 ms가 걸립니다. 그것은 우리를 아프게한다.

이 문제를 해결하려면 75 개의 스레드가있는 작업 관리자를 만들고 응용 프로그램에 할당 했으므로 성능이 크게 향상됩니다. 참고 : 동일한 웹 로직에 20 개의 애플리케이션이 배포됩니다. 내 응용 프로그램에 75 개의 스레드를 사용하면 다른 응용 프로그램에 어떻게 영향을 미칩니 까?

언제든지 지연 요청없이 150 요청을 처리 할 수 ​​있도록 조언 해주세요.

답변

1

스레드 수 제한은 JVM이 아닌 호스트 시스템을 기반으로합니다. 이 문서의 cat /proc/sys/kernel/threads-max을 사용하여 호스트가 처리 할 수있는 한도를 확인할 수 있습니다. Maximum number of threads per process in Linux?

이제 한도를 알면이 값을 사용하여 지정된 수의 스레드를 사용하도록 서버를 미세 조정할 수 있습니다. http://docs.oracle.com/cd/E13222_01/wls/docs81/perform/WLSTuning.html#1140013

작업 관리자는 최대 개수의 스레드를 제공하지 않습니다. 그들은 가능한 최대 값을 제한합니다. 이는 스레드 수명이 길고 스레드가 멈추기 시작할 때 더 많은 리소스를 사용하는 응용 프로그램을위한 것입니다. 이론 상으로는 무한한 양의 스레드가 있습니다. 내 제안은 config.xml에 언급 된대로 값을 높이고 달콤한 자리를 찾는 것입니다. 4 개의 JVM으로이 작업을 수행 할 수 없다면 2 개의 JVM을 요청하는 것이 훨씬 더 현명합니다. 소프트웨어만으로는 할 수없는 일이 있습니다.

+0

감사합니다. 우리는 weblogic 10.3.x를 사용하고 있습니다. 스레드 수를 설정하는 방법을 제공하지 않습니다. – user1346316