Gründe für hohe CPU-Auslastung in SocketInputStream.socketRead0 ()

Beim Erstellen eines Profils für eine selbst erstellte Webanwendung bin ich auf eine (zumindest für mich) sehr seltsame Beobachtung gestoßen.

Fast die gesamte Zeit wird in verbrachtsocketRead0() Methode von aSocketInputStream Klasse. Das ist nicht verwunderlich, da meine Anwendung bei jeder Anforderung eine Netzwerkverbindung mit einem Remotedienst herstellt. Was ist das nicht nur seltsamWanduhr Zeit Verwendung ist für diese Methode hoch,CPU-Uhrzeit auch sehr hoch. Ich kann nicht verstehen, warum die CPU-Zeit hoch ist, denn wenn meine Anwendung auf die Antwort des Remotedienstes wartet (was in der Tat nicht so schnell ist), bleibt für die Anwendung selbst nichts mehr zu tun. Die CPU-Zeit sollte also anscheinend niedrig sein.

Noch etwas Beobachtung:

VisualVM im Sampling-Modus zeigt diese MethodeSocketInputStream.socketRead0() isst bis zu 95% der Zeit (beides Wanduhrzeit)und CPU-Zeit);mpstat (wir verwenden Linux als Betriebssystem) zeigt ca. 90% Benutzerzeit und ca. 1-3% Systemzeit (der Rest ist Leerlaufzeit);Anwendung, die auf dem dedizierten Server bereitgestellt wird;Remote-Service ist auch eine HTTP-Webanwendung. Die durchschnittliche Antwortzeit beträgt ca. 100 ms. Die durchschnittliche Antwortgröße beträgt ca. 2 KB.meine Bewerbung benutze FederRestTemplate mit dem Remote-Service interagieren, nicht mit demSocketInputStream direkt.

Im Moment habe ich nur eine Idee - vielleicht ist dies ein Overhead beim Aufrufen nativer Methoden in JVM (SocketInputStream.socketRead0() ist heimisch)?

Was denkst du? Gibt es noch andere Gründe dafür?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage