SpringBoot에 내장된 Tomcat은 기본 설정에서 Tomcat의 최대 스레드 수는 200개이고 최대 연결 수는 10,000개입니다. 기본적으로 지원되는 최대 동시성은 10,000이며 이는 지원되는 연결 수를 의미합니다.
1은 BIO이고 하나의 스레드는 하나의 소켓 연결만 처리합니다. 하나의 스레드가 여러 소켓 연결을 처리합니다.
여러 연결을 처리하는 단일 스레드는 일반적으로 큰 문제를 일으키지 않습니다. 왜냐하면 HTTP 요청은 시간이 많이 걸리지 않고 여러 연결은 일반적으로 동시에 메시지를 보내지 않기 때문입니다. 여러 연결을 처리하는 스레드는 매우 느리고 시간 초과될 수 있습니다
기본 내장 Tomcat 구성
server.tomcat.accept-count
: 대기 대기열 길이, 스레드 수가 할당 가능 모두 소진된 후 후속 요청은 대기 대기열에 들어가 대기합니다. 대기 대기열이 가득 차면 처리가 거부됩니다. 기본값은 100입니다. server.tomcat.accept-count
:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。
server.tomcat.max-connections
:最大可被连接数,默认10000
server.tomcat.max-threads
:最大工作线程数,默认200,
server.tomcat.min-spare-threads
server.tomcat.max-connections
: 최대 연결 수, 기본값 10000server.tomcat.max-threads
: 최대 작업 스레드 수 , 기본값은 200입니다.
server.tomcat.min-spare-threads
: 최소 작업 스레드 수, 초기 할당 스레드 수, 기본값은 10아래 기본 구성에서는 연결 수가 10,000개를 초과하면 연결 거부가 발생합니다기본 구성에서는 200+100(최대 작업자 스레드 수 + 대기 대기열 길이)을 초과하면 트리거된 요청이 거부됩니다
기본 구성은 현재 요구 사항을 충족할 수 없으므로 직접 조정하고 처리를 위해 구성을 수동으로 수정할 수 있습니다. process
ps -ef | grep java //프로젝트에서 시작된 포트 보기
pstree -p 7968 | wc -l //프로세스 수 확인
구성 파일을 사용하여 WebServerConfiguration을 추가할 수도 있습니다. java file
server.port=7001 server.tomcat.accept-count=1000 server.tomcat.max-connections=10000 server.tomcat.max-threads=500 server.tomcat.min-spare-threads=100
Remarks:
MySQL 데이터베이스 QPS 용량 문제:
기본 키 쿼리: 수천만 레벨 데이터 == 1~10ms
고유 인덱스 쿼리: 수천만 데이터 == 10-100ms
고유하지 않은 인덱스 쿼리: 수천만 개의 데이터 == 100-1000ms
인덱스 데이터 없음: 백만 수준의 데이터 == 1000ms+
MySQL 데이터베이스 TPS 용량 문제 :
삽입이 아닌 업데이트 및 삭제 작업: 동일한 쿼리
삽입 작업: 1w~10w tps(구성 최적화에 따라 다름)
1. + Tomcat을 결합하여 정적 페이지에는 Apache를, 동적 페이지에는 Tomcat을 사용합니다. 동시에 동시성이 너무 크고 스레드 재활용이 너무 늦어지는 상황을 처리하기 위해 ConnectionTimeout 시간이 줄어듭니다.
2. 과도한 부담 문제의 경우 TOMCAT은 너무 많은 스레드 로드를 처리할 수 없으며 JVM이 너무 크면 메모리 관리 비용이 크게 증가합니다. 보다 합리적이고 과학적인 접근 방식은 2GB의 메모리를 사용하고 각각 512MB의 메모리를 가진 3~4개의 TOMCAT 인스턴스를 구성하는 것입니다.
3. 데이터베이스 연결 풀. 많은 사람들이 데이터베이스 액세스의 동시 성능을 여러 번 향상시킬 수 있는 C3P0 사용을 권장합니다.
4. Tomcat 클러스터를 사용하면 더 높은 구성의 서버에 여러 Tomcat을 배포할 수도 있고, Apache와 Tomcat의 통합 방법은 여전히 JK 방식입니다. 다수의 사용자에 대한 시스템 응답 측면에서 Apache+3Tomcat 클러스터 > Apache+2Tomcat 클러스터 > Apache 통합 Tomcat > 으로 확인되었습니다. 그리고 Apache + 여러 Tomcat 클러스터의 배포 방법을 사용할 경우 Tomcat 하나가 다운되더라도 시스템을 계속 사용할 수 있으므로 하드웨어 시스템의 성능이 충분히 우수할 때 소프트웨어의 성능을 극대화해야 합니다. Tomcat 클러스터를 추가하는 방법을 사용할 수 있습니다.
1. MPM(다중 처리 모듈)을 구성합니다. ThreadPerChild는 각 프로세스의 스레드 수를 설정하는 데 사용됩니다. Windows 환경에서는 기본값이 64이고 최대값은 1920입니다. 서버 성능이 높을 경우 100~500 사이로 설정하는 것이 좋습니다. 값은 더 커질 것이고 그렇지 않으면 더 작아질 것입니다. 각 하위 프로세스가 처리할 수 있는 최대 요청 수는 MaxRequestPerChild 매개변수에 의해 결정됩니다. 이 매개변수의 값은 서버의 메모리에 따라 달라집니다. 메모리가 상대적으로 큰 경우에는 더 큰 매개변수로 설정할 수 있습니다. 권장되는 값은 3000입니다.
2. 및 이름 확인 HostnameLookups off
3. UseCanonicalName 모듈을 켭니다 UseCanonicalName on
4. 일반적으로 로드할 필요가 없는 모듈은 mod_include.so, mod_autoindex.so, mod_auth.so.
5. KeepAlive 지원 켜기
KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
실제 경험에 따르면 Apache 및 Tomcat 클러스터를 통한 시스템 성능 향상 효과는 매우 분명합니다. 하드웨어 리소스를 사용하고 여러 Tomcat을 통해 처리를 공유합니다. Tomcat을 단독으로 사용할 때의 부담입니다.
웹 서버에서 허용하는 최대 연결 수는 운영 체제의 커널 매개변수 설정에 따라 다릅니다. 일반적으로 Windows의 경우 약 2,000개, Linux의 경우 약 1,000개입니다.
위 내용은 springboot 내장 Tomcat이 지원하는 최대 동시성 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!