Heim  >  Artikel  >  Java  >  So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

WBOY
WBOYnach vorne
2023-05-11 23:13:101221Durchsuche

Ein gleichzeitiges Containerproblem gefunden

So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

Jeder Thread wurde fünfmal angefordert. Der Thread wurde innerhalb von 5 Sekunden erstellt Es trat eine Übergröße auf und die Fehlerquote erreichte 43 %. Diese gleichzeitige Kapazität ist für Server mit besseren Konfigurationen relativ schwach.

Tief in die unterste Ebene von SpringBoot, um den Grund zu verstehen

Die Konfiguration von Metadaten wird in der offiziellen SpringBoot-Dokumentation erwähnt

So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

Sie können sehen, dass die Standardkonfiguration der Ports zu unseren am häufigsten verwendeten Einstellungselementen gehört ihnen.

Standardmäßige eingebettete Tomcat-Konfiguration

1. server.tomcat.accept-count: Warteschlangenlänge Wenn die Anzahl der zuweisbaren Threads aufgebraucht ist, werden nachfolgende Anforderungen in die Warteschlange gestellt, um zu warten wird abgelehnt, Standard 100.

2. server.tomcat.max-connections: die maximale Anzahl von Verbindungen, der Standardwert ist 10000

3 server.tomcat.max-threads: die maximale Anzahl von Arbeitsthreads, der Standardwert ist 200,

4. server.tomcat.min- spare-threads: Die Mindestanzahl der Arbeitsthreads, die Anzahl der anfänglichen Zuordnungsthreads, der Standardwert ist 10

In der Standardkonfiguration wird die Verbindung abgelehnt, wenn die Anzahl der Verbindungen 10.000 überschreitet

Unter In der Standardkonfiguration werden die ausgelösten Anforderungen nach mehr als 200 + 100 (maximale Arbeitsanzahl der Threads + Warteschlangenlänge) abgelehnt.

Diese Metadaten-Spring bietet natürlich externe Konfigurationsfunktionen In den Standardeinstellungen beträgt die maximale Anzahl von Threads von Tomcat 200 und die maximale Anzahl von Verbindungen 10.000. Der Umfang der unterstützten Parallelität bezieht sich auf die Anzahl der Verbindungen. Wie können 200 Threads 10.000 Verbindungen verarbeiten?

Derzeit verfügt Tomcat über drei Modi zum Verarbeiten von Verbindungen. Einer ist BIO, bei dem ein Thread nur eine Verbindung verarbeitet, und der andere ist NIO, bei dem ein Thread mehrere Verbindungen verarbeitet. Da HTTP-Anfragen nicht allzu lange dauern und mehrere Verbindungen in der Regel nicht gleichzeitig Nachrichten empfangen, stellt die Verarbeitung mehrerer Verbindungen mit einem Thread kein großes Problem dar.

Es gibt auch den Apr-Modus. Diese drei Tomcat-Modi werden später ausführlich vorgestellt und hier nicht näher erläutert.

Wenn Tomcat startet, können Sie anhand des Protokolls sehen, welchen Betriebsmodus der Connector verwendet:

#更改内嵌tomcat参数
server.port=8080
## 等待队列长度,默认100。
server.tomcat.accept-count=1000
## 最大工作线程数,默认200。(4核8g内存,线程数经验值800,操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。)
server.tomcat.max-threads=800
## 最小工作空闲线程数,默认10。(适当增大一些,以便应对突然增长的访问量)
server.tomcat.min-spare-threads=100
Der Standardwert kann in spring-boot-autoconfigure-version number.jar liegen (zum Beispiel: spring-boot-autoconfigure-2.1 .0.RELEASE) können Sie die Standardkonfiguration anzeigen, indem Sie die Datei /web/ServerProperties.class dekomprimieren und dekompilieren.

Maßgeschneiderte eingebettete Tomcat-EntwicklungSo betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

Über KeepAliveSo betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

KeepAlive ist standardmäßig in HTTP-Anfragen mit Jmeter aktiviert

Https KeepAlive-Anfrage ist, wenn unser Client HTTP an unseren Server sendet. Wenn der KeepAlive-Anfrageheader angefordert wird enthalten ist, bedeutet dies, dass unser HTTP-Client eine KeepAlive-Verbindung mit dem Server herstellen möchte. Der entsprechende Zweck dieser Verbindung besteht darin, die entsprechende Antwort an unseren Server zu senden. Danach sollte unser Server nicht sofort die Verbindung trennen, sondern warten und versuchen, dies zu tun Verbindung wiederverwenden.

Diese Lösung wird verwendet, um das zeitaufwändige Problem zu lösen, das durch HTTP-Antwort, Zustandslosigkeit, Trennung und jedes Mal neue Verbindung verursacht wird.

Wenn wir jedoch nach dem Öffnen jeder Webseitenanforderung eine lange Verbindung mit dem Server aufrechterhalten, ist die Anzahl der Verbindungen auf unserem Server bald aufgebraucht. Daher war in der frühesten HTTP 1.0-Version keine KeepAlive-Anfrage vorgesehen , aber die aktuelle Http1.1 plus KeepAlive-Anfrage richtet sich an immer mehr mobile Geräte und sogar an einige sehr komplexe Webseiteninteraktionen, die während des Browsing-Prozesses des Benutzers häufige Anfragen an den Server erfordern. Daher ist der Aufbau einer KeepAlive-Verbindung nicht der Fall Für Stresstestzwecke bietet es jedoch tatsächlich einige Leistungsvorteile in Anwendungsszenarien. Unabhängig davon, ob es sich um den Client oder den Server handelt, besteht bei einigen Netzwerkkommunikationsinteraktionen keine Notwendigkeit, eine neue Verbindung herzustellen und diese zu trennen Aufbau einer TCP/IP-Verbindung, es müssen jedoch nur Daten gesendet werden.

Aber ein solches Design bringt auch einige Probleme mit sich. Wenn unser Server keine Einschränkungen für den Betrieb von KeepAlive 1 vorsieht. Die Verbindung führt keine Operationen aus und antwortet nicht, dann bedeutet diese Verbindung, dass für den Server eine kostenpflichtige Verbindung 2 erforderlich ist. Einige Angreifer nutzen böswillig KeepAlive-Verbindungen, um DDOS-Angriffe an unseren Server zu senden. Aus Sicherheitsgründen müssen wir die Tomcat-Entwicklung anpassen

1. Wie viele Millisekunden nach denen der Client nicht antwortet, bevor KeepAlive getrennt wird

2 maxKeepAliveRequests: Wie viele Anfragen, nach denen KeepAlive die Verbindung trennt und abläuft

在SpringBoot官方文档中提到了对内嵌容器的配置

So betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein

//当spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会把bean加载进spring容器
@Configuration
public class WebServerConfiguration implements WebServerFactoryCustomizer<configurablewebserverfactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
  //使用对应工厂类提供给我们的接口定制化我们的tomcat connector
  ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
    @Override
    public void customize(Connector connector) {
      Http11NioProtocol protocol= (Http11NioProtocol) connector.getProtocolHandler();
      //定制KeepAliveTimeout,设置30秒内没有请求则服务器自动断开keepalive连接
      protocol.setKeepAliveTimeout(30000);
      //当客户端发送超过10000个请求则自动断开keepalive连接
      protocol.setMaxKeepAliveRequests(10000);
    }
  });
}
}</configurablewebserverfactory>

Das obige ist der detaillierte Inhalt vonSo betten Sie die Tomcat-Parallelitätskapazität in SpringBoot ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen