java.io.ReadObject периодически принимает экстремальное время - PullRequest
3 голосов
/ 20 сентября 2011

Мы пытаемся десериализовать довольно здоровенный объект с помощью простых вложенных объектов.Обычно это занимает примерно 5 - 10 мс.Однако в последнее время мы наблюдаем случайную задержку до 3000 мс во время этого вызова.Я могу запускать запросы снова и снова и получать одну и ту же длину контента из вызова, но один из каждых 20 является огромным отставанием.

При запуске профилировщика кажется, что процессорное время израсходовано в java.io.ReadObject.Я действительно озадачен тем, что может вызвать такой скачок во времени, учитывая, что вызовы идентичны.

Любые идеи будут чрезвычайно оценены.Версия 1.6.Похоже, что нет связанных событий GC.

1 Ответ

0 голосов
/ 20 сентября 2011

Стандартная Java-сериализация создает много мусора.Если вы видите всплески во времени, чтобы выполнить это, то это будет потому, что а) он ожидает ввода-вывода (который может быть любым количеством времени) или б) выполняет вспомогательный или полный GC.

Я бы запустилваше приложение с

-verbosegc

, чтобы увидеть, когда выполняется полный сбор данных.В противном случае вы можете использовать jstat

jstat -gccause 5s {process-id}

Большинство коллекций - «остановка мира», поэтому, когда выполняется сборщик мусора, readObject, по-видимому, использует большое количество ЦП, хотя на самом деле это былоожидание, пока GC очистит некоторые данные.

При профилировании вашего приложения я предлагаю включить профилирование памяти.

Тем не менее, чтобы иметь такие задержки, вы должны де сериализовать много данных.,Чтобы получить задержку 3 с, обычно требуется около 3 ГБ мусора.Если это один на 20 запросов, каждый запрос может составлять в среднем 150 МБ мусора.

Возможно, пришло время оптимизировать вашу сериализацию.Вы можете получить это почти ничего, но требуется больше и больше работы, чтобы сделать это, чем ниже вы идете.Я бы начал с реализации readObject / writeObject как его самого простого изменения, которое могло бы дать вам наибольшую выгоду.

...