스프링 부트 - 생성되는 연결 수 제한
저는 Spring Boot을 사용하여 마이크로 서비스를 개발했습니다.백엔드 콜을 스터브하여 서비스를 테스트하고 있었습니다.스레드 수를 보면 서비스에 대해 작성된 최대 스레드 수는 콜 수가 훨씬 많아도 언제든지 20개임을 알 수 있습니다.Spring Boot을 사용하여 개발된 마이크로서비스에 발신할 수 있는 콜 수에 제한이 있습니까?트러블 슈팅/접속 수를 늘리기 위해 어떤 절차를 밟아야 하는지 안내해 주시겠습니까?
이 설정은 내장형 용기(톰캣, 제티...)에서 파생됩니다.
Tomcat의 스레드 수
이 속성은 application.properties에서 지정할 수 있습니다.
server.tomcat.max-threads=400
20개의 스레드를 카운트했다고 합니다만, 다른 스택 오버플로우의 질문/응답에 의하면, server.tomcat.max-threads 의 디폴트치는 0 이므로, tomcat 의 디폴트수는 200 이 됩니다.다음 Tomcat 설명서를 참조하십시오.
이 커넥터에 의해 생성되는 요청 처리 스레드의 최대 수. 따라서 처리할 수 있는 동시 요청의 최대 수가 결정됩니다.지정하지 않으면 이 Atribute는 200으로 설정됩니다.이 커넥터에 실행자가 관련되어 있는 경우 커넥터가 내부 스레드 풀이 아닌 실행자를 사용하여 작업을 실행하므로 이 속성은 무시됩니다.
또한 다음 속성:
아래:
server.undertow.worker-threads
제트:
server.jetty.acceptors
Spring의 문서에서 자산 목록을 찾을 수 있습니다.
스프링부트의 구성을 확인할 수 있습니다.
server.tomcat.accept-count=100 # Maximum queue length for incoming connection requests when all possible request processing threads are in use.
server.tomcat.additional-tld-skip-patterns= # Comma-separated list of additional patterns that match jars to ignore for TLD scanning.
server.tomcat.background-processor-delay=10s # Delay between the invocation of backgroundProcess methods. If a duration suffix is not specified, seconds will be used.
server.tomcat.basedir= # Tomcat base directory. If not specified, a temporary directory is used.
server.tomcat.max-connections=10000 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size in bytes of the HTTP message header.
server.tomcat.max-http-post-size=2097152 # Maximum size in bytes of the HTTP post content.
server.tomcat.max-threads=200 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=10 # Minimum amount of worker threads.
server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.
server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
server.tomcat.protocol-header-https-value=https # Value of the protocol header indicating whether the incoming request uses SSL.
server.tomcat.redirect-context-root=true # Whether requests to the context root should be redirected by appending a / to the path.
server.tomcat.remote-ip-header= # Name of the HTTP header from which the remote IP is extracted. For instance, `X-FORWARDED-FOR`.
server.tomcat.resource.cache-ttl= # Time-to-live of the static resource cache.
server.tomcat.uri-encoding=UTF-8 # Character encoding to use to decode the URI.
server.tomcat.use-relative-redirects= # Whether HTTP 1.1 and later location headers generated by a call to sendRedirect will use relative or absolute redirects.
받아들여진 답변은 매우 유용하지만, 저는 최근에 제가 생각하기에 원래의 포스터와 같은 문제를 경험했습니다.이 검색 결과만이 제 경험과 직접적인 관련이 있다는 것을 알 수 있었기 때문에 누군가에게 도움이 될 경우를 대비해서 솔루션을 추가하려고 생각했습니다.
제 경우, 관찰된 동시성 제한 20은 디폴트 설정 20에 의해 부과되었습니다.maxConcurrentStreamExecution
에 있어서의 재산.org.apache.coyote.http2.Http2Protocol
.
이 문제가 발생하고 있고 HTTP/2를 사용하고 있는 경우, 이 문제가 발생할 가능성이 높아집니다.maxConcurrentStreamExecution
도움이 될 거야
자세한 내용은 Tomcat Configuration Reference에서 확인할 수 있습니다.이 레퍼런스에는 디폴트로는 200(20이 아님)으로 설정할 필요가 있다고 기재되어 있습니다.디폴트 설정인20 은, 확실히 확인할 수 있습니다.org.apache.coyote.http2.Http2Protocol
단, 이것이 오타인지 Tomcat의 임베디드 버전에서 다르게 표시되는 것인지 확실하지 않습니다.
액추에이터가 있는 경우 메트릭을 볼 수 있습니다.
/syslog/syslog/syslog.스레드.config.max
{
"name": "tomcat.threads.config.max",
"description": null,
"baseUnit": null,
"measurements": [{
"statistic": "VALUE",
"value": 200.0
}],
"availableTags": [{
"tag": "name",
"values": ["http-nio-8080"]
}]
}
실제 값 Tomcat이 생성하기로 결정했습니까?/syslog/syslog/syslog.스레드.현재
부하에 따라서는 10개를 볼 수 있다
spring boot는 max-time을 완전히 사용하지 않는 것 같습니다.단, max-time은 더 많은 것으로 시작할 수 있습니다
server:
tomcat:
min-spare-threads: 40
maxConcurrentStreamExecution
Boot ( 200): Spring Boot 2' HTTP/2' (set 200
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> containerCustomizer() {
return new WebServerFactoryCustomizer<TomcatServletWebServerFactory>() {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Arrays.stream(connector.getProtocolHandler().findUpgradeProtocols())
.filter(upgradeProtocol -> upgradeProtocol instanceof Http2Protocol)
.map(upgradeProtocol -> (Http2Protocol) upgradeProtocol)
.forEach(http2Protocol -> http2Protocol.setMaxConcurrentStreamExecution(200));
}
});
}
};
}
언급URL : https://stackoverflow.com/questions/39002090/spring-boot-limit-on-number-of-connections-created
'bestsource' 카테고리의 다른 글
AngularJS - 모듈 의존관계, 이름 충돌 (0) | 2023.03.05 |
---|---|
npx create-react-app을 사용하여 react를 설치할 수 없습니다. (0) | 2023.03.05 |
AngularJS 및 content편집 가능한 양방향 바인딩이 예상대로 작동하지 않음 (0) | 2023.03.05 |
Wordpress 썸네일 생성에 연결하는 방법 (0) | 2023.03.05 |
Apache 웹 서버에 React App을 배포하는 방법 (0) | 2023.03.05 |