-2

Ich habe eine Anforderung, wo ich ein kleines Dienstprogramm zu testen, um apis zu testen (natürlich gibt es bestehende Tools, aber es wurde beschlossen, eine zu schreiben). Ich bin verpflichtet, die API zu bombardieren, für den gleichen api Anruf, mit 100 Fäden, sagen wir mal 100.000 mal.machen Sie einen GET-Anruf 100.000 mal

Ich verwende 'PoolingHttpClientConnectionManager' für die Anrufe. Ich verwende etwas wie in dem unten stehenden Link aufgeführt:

https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

Meine Frage ist:

(1) Wie kann ich den obigen Code für 100.000 Iterationen laufen? Es ist offensichtlich eine schlechte Idee, so viele Threads zu verwenden. Anfänglich dachte man daran, ExecutorService zu verwenden, um die Thread-Anzahl und die Anzahl der einzureichenden Jobs zu verwalten, aber es fühlte sich überflüssig an.

(2) Ich lese über 'setMaxTotal' (max Verbindungen) und 'setDefaultMaxPerRoute' (gleichzeitige Verbindungen), aber ich denke nicht, es wird helfen, zu erreichen (1), aber ich werde natürlich aufgefordert, die Werte zu erhöhen.

Bitte beraten. Danke im Voraus.

+0

"Es wurde entschieden". Wenn Sie nicht sagen, warum entschieden wurde, nicht nur jmeter zu verwenden, geben wir Ihnen wahrscheinlich keinen nützlichen Rat, was Sie stattdessen tun sollten. – bmargulies

+0

hmm, ich habe das gefragt, anscheinend war der Gedanke zu sehen, ob die Anwendung diese vielen Abfragen ohne Fehler verarbeiten kann und keine zusätzlichen Informationen eingibt. Tut mir leid, wenn die Antwort nicht ausreicht. – learner

Antwort

1

Sie können einen Threadpool verwenden und die Workerfunktion so oft wie nötig drücken. Dann könnten Sie sogar die Anzahl der Arbeitsfäden ändern, die die Funktionen ausführen, um unterschiedliche Belastungssituationen zu simulieren.

Thread Tutorial: https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html

+0

Vielen Dank für Ihre Antwort. Ich dachte, ExecutorService wie folgt zu verwenden: ExecutorService executor = Executors.newFixedThreadPool (5); für (int i = 0; i <10; i ++) { Runnable Worker = neuer WorkerThread ("" + i); executor.execute (Arbeiter); } Aber da ich bereits "PoolingHttpClientConnectionManager" verwende, war ich mir nicht sicher, ob es erforderlich war. – learner

+0

Das macht die Programmierung so großartig. Es gibt meist eine unbestimmte Anzahl von möglichen Lösungen. Es kann bessere oder schnellere Lösungen geben, aber da ich PoolingHttpClientConnectionManager nicht kenne, würde ich einen allgemeineren Ansatz versuchen. Sie können sicherlich auch herausfinden, ob der Manager bereits eine Lösung für diesen Fall bietet. –

+0

Danke Tomas. Ich habe keine Erfahrung mit 'PoolingHttpClientConnectionManager', daher wollte ich Meinungen. Danke, dass es geholfen hat. – learner

1

Warum Sie Jmeter nicht für die Prüfung solchen Leistung/Last verwenden?

+0

Danke für Ihre Antwort. Ich habe in einem früheren Kommentar geantwortet. – learner

+0

ich Sekunde. Erfinde ein Rad nicht neu, besonders wenn ein "freies" Rad verfügbar ist. –

+0

Entschuldigung, ich habe diesen Kommentar verpasst. Aber wenn Sie mit Jmeter nicht vertraut sind, dann gehen Sie zu curl-Befehlen oder etwas ähnlichem wie Apache bench. Das wird Ihre Anforderung erfüllen. Nach meinem Verständnis reichen Executors in Java aus, um Multi Threading zu verarbeiten. –