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

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

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

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

VisualVM в режиме выборки показывает, что методSocketInputStream.socketRead0() кушает до 95% времениа также Процессорное время);mpstat (мы используем Linux в качестве ОС) показывает около 90% времени пользователя и ~ 1-3% времени системы (остальное время простоя);приложение, развернутое на выделенном сервере;Удаленный сервис также является веб-приложением HTTP. Среднее время отклика составляет около 100 мс. Средний размер ответа составляет около 2 КБ.мое приложение использует пружинуRestTemplate взаимодействовать с удаленным сервисом, а неSocketInputStream непосредственно.

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

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

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

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