Terracotta EhCache - одновременная модификация создает огромный байтовый массив во время сериализации
Если мой вид дерева доминантности в куче выглядит так, как показано ниже, могу ли я предположить, что основным вкладчиком (~1 ГБ) в мою кучу является экземпляр Thread, созданный Weblogic? И в этой теме ссылка на ByteArrayOutputStream является причиной для 1 ГБ?
Следующий вопрос: Могу ли я также предположить, что это связано с сериализацией объекта? Может быть, вызвано Terracotta ehcahce (из третьей строки. Не потому, что он находится рядом с ByeArrayOS, потому что в нашем коде это единственное место, где может происходить сериализация)?
2 ответа
Ehcache действительно полагается на сериализацию Java в тот момент, когда ваш кеш выходит за пределы кучи.
Тем не менее, он будет только сериализовать то, что вы положили в кеш. Так возможно ли, что некоторые кэшированные отображения имеют такое огромное значение или даже ключ?
Дерево Dominator говорит, что у вас есть нить Weblogic, содержащая ByteArrayOutputStream
(и SerializerObjectOutputStream). Поток Weblogic - это классический рабочий поток, в настоящее время обрабатывающий запрос. И это в настоящее время застряло на чем-то.
Итак, это эквивалент
ByteArrayOutputStream in = new ByteArrayOutputStream();
Thread.wait();
Нить держит ByteArrayOutputStream
и это не может быть мусором, так как поток не закончен с ним.
Наблюдение за сериализатором заставляет меня думать, что вы в настоящее время десериализуетесь с диска Ehcache или вне его.
Возможно ли, что вы помещаете в кеш довольно большие объекты? Как заметил @louis-jacomet.