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.

Другие вопросы по тегам