Erhöhung der Anzahl der gleichzeitigen verbindungen in tomcat 7
Fragen sich, wie erhöhen Sie die Anzahl der gleichzeitigen verbindungen in tomcat 7. Ich habe einige nachforschungen und fand den apache-Dokumentation, die Einstellung von Werten zu acceptCount, maxConnections und increaseing die maxThreads würde es tun, aber wenn er versucht wird, ich war nur in der Lage zu Unterwerfen 500 Anfragen aus der 1000. Unten ist mein snippet aus server.xml Datei -
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="2000" acceptCount="1000" maxConnections="1000"
scheme="https" secure="true"
keystoreFile="certs/tomcat.keystore" keystorePass="xxxxxxxx"
clientAuth="false" sslProtocol="TLS" server="Apache" />
Können Sie mir bitte helfen, herauszufinden, der beste und einfach Weg, um loszuwerden, diese.?
Dank,
Sirish.
Sollten Sie einen thread-dump, um herauszufinden, was blockiert die Anfragen, weil Sie konfiguriert 2000 threads (max aber nicht min, also Tomcat erstellen müssen, mehr threads on the fly). Doch 2000 threads ist riesig, sind Sie sicher, dass Sie benötigen so viele?
Hallo Frank, ich bin einfach zu spielen, um Sie zu finden, wenn die Erhöhung threads einen Unterschied macht, und auch bewusst, es würde dazu führen, Speicher Probleme. An dieser Stelle möchte ich den server konfigurieren zu akzeptieren, so viele verbindungen wie möglich, ohne Schuldige zu 200 threads (wie von tomcat standardmäßig). bin neugierig zu wissen, wie man einen thread dump von der Art und Weise.? Jede Hilfe wird sehr geschätzt. Danke.!!
Um eine thread-dump, können Sie
Hallo Frank, ich bin einfach zu spielen, um Sie zu finden, wenn die Erhöhung threads einen Unterschied macht, und auch bewusst, es würde dazu führen, Speicher Probleme. An dieser Stelle möchte ich den server konfigurieren zu akzeptieren, so viele verbindungen wie möglich, ohne Schuldige zu 200 threads (wie von tomcat standardmäßig). bin neugierig zu wissen, wie man einen thread dump von der Art und Weise.? Jede Hilfe wird sehr geschätzt. Danke.!!
Um eine thread-dump, können Sie
kill -3 PID
(wenn Sie auf einigen Unix; es gibt eine Strg-etwas-Kombination auf Windows, um das gleiche Ergebnis zu erzielen), das drucken der thread-dump auf die standard-Ausgabe, oder verwenden Sie jstack PID > threads.txt
, jstack, Teil des JDK. Auch wenn Sie nur 200 threads, wenn Sie verwendet werden, die durch gleichzeitige Anfragen es geht um eine langen zu Lesen, zu analysieren.InformationsquelleAutor Sirish | 2012-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen einer großen Anzahl von threads1, und akzeptieren eine große Anzahl von Anfragen bedeutet nicht, dass Ihr server in der Lage sein, um die Anforderungen
Wenn du N Gewinde und nur M physische Prozessoren /Kerne, dann in jedem thread wird nur 1 Prozessor, wenn
M >= N
und eine DurchschnittlicheM /N
Prozessoren, wennM < N
. Angenommen, Sie haben N-Anfragen, von denen jedes für eine 1-Faden, und jede Anfrage dauertR
Sekunden CPU-Zeit. Die Durchschnittliche verstrichene ZeitT
genommen um eine AnfrageT = Min(R, R * N /M) seconds
. Es ist ziemlich klar, dass, wie Sie erhöhenN
(die Anzahl der aktiven threads und Anfragen) die Durchschnittliche verstrichene ZeitT
für jede individuelle Anforderung proportional.Zusätzlich zu, dass, wenn Sie viele threads, Sie werden alle mit Speicher, und alle werden im Wettbewerb für den Zugriff auf gemeinsam genutzte Daten-Strukturen ... oder die Datenbank. Eine alle diese zusätzlichen Ressourcen-Nutzung und Konflikte ist die Erhöhung der Gemeinkosten für das system als ganzes in verschiedener Weise.
So, was ich vermute, passiert ist, dass mit dieser Anzahl von threads, die jeweils versuchen, die Bearbeitung von Anfragen gleichzeitig, die Zeit
T
beginnt der Ansatz der client-oder server-side-request timeout. (Und beachten Sie, dass die Launen der scheduler, etc bedeuten, dass die tatsächliche Zeit für eine bestimmte Anforderung könnte sein, weniger als oder beträchtlich mehr als der Durchschnitt.) Wenn eine Anfrage mal aus, dies wiederum reduziert den Durchsatz in Bezug auf die Anforderungen, die abgeschlossen werden, weil die Arbeit, die auf jede Zeitüberschreitung der Anforderungen " (in der Regel) verschwendet.Es sei denn, die Anforderungen mit sich bringen sprechen zu verlangsamen, externe Dienstleistungen, ich würd dir raten es zu REDUZIEREN die Anzahl der threads, die auf nicht mehr als 200 ... der Tomcat-default2. Ich erwarte, dass dies erhöht den Durchsatz des Systems. Es wird nicht unbedingt lassen, Sie verarbeiten alle diese 1000 Anfragen, die gestartet wurden, in diesem Zeitraum, aber ich sage Voraus, dass es eine Erhöhung der Anzahl der Anfragen, die erfolgreich verarbeitet werden.
1 - in der Tat, die Erhöhung der Anzahl der threads zu 1000 bedeutet noch nicht einmal, dass Sie werde in der Lage sein zu akzeptieren, 1000 Anfragen. Wenn Sie Hunderte von threads im Zustand RUNNABLE, ist es wahrscheinlich, dass der Tomcat-listener-thread (der, der fordert
ServerSocket.accept()
) CPU ausgehungert und nicht in der Lage zu halten mit der Anfrage Anreise rate.2 - Sie tun müssen, um einige performance-tuning auf Ihrem system, aber ich wäre nicht überrascht, wenn die Verringerung noch weiter verbessert, was sogar noch mehr. Es hängt davon ab, Ihre hardware, Ihre Anwendung und (erwarte ich) Ihre back-End-Datenbank.
InformationsquelleAutor Stephen C