Причины высокой загрузки ЦП в SocketInputStream.socketRead0 ()

При профилировании собственного веб-приложения я наткнулся на очень странное (по крайней мере для меня) наблюдение.

Почти все время проводится вsocketRead0() методSocketInputStream учебный класс. Это неудивительно, потому что мое приложение создает сеть с удаленным сервисом по каждому запросу. Что странно, что не толькоwall clock time использование высоко для этого метода,CPU clock time тоже очень высоко. Я не могу понять, почему процессорное время велико, потому что, если мое приложение ожидает ответа удаленной службы (что на самом деле не так быстро), для самого приложения ничего не остается. Так что процессорное время должно быть явно низким.

Еще немного наблюдения:

VisualVM in sampling mode shows that method SocketInputStream.socketRead0() is eating up to 95% of time (both wall clock time and CPU time); mpstat (we use Linux as a OS) shows around ~90% user time and ~1-3% system time (the rest is idle time); application deployed on the dedicated server; remote service is HTTP web-application also. Average response time is about 100ms. Average response size is about 2Kb. my application use spring RestTemplate to interact with remote service, not the SocketInputStream directly.

Пока у меня есть только одна идея & # x2014; возможно это накладные расходы на вызов собственных методов в JVM (SocketInputStream.socketRead0() родной)?

Как вы думаете? Есть ли другие причины для этого?

Ответы на вопрос(2)

Ваш ответ на вопрос