Удаленно определить утечку памяти в приложении, используемом клиентом - PullRequest
6 голосов
/ 01 марта 2012

Клиент жалуется на утечку памяти в нашем Java-приложении.

Несмотря на все мои попытки воспроизвести его среду, конфигурацию и использование, я не смог воспроизвести и, таким образом, идентифицировать утечку.

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

Под управлением клиента, который отправит его мне, к этому предъявляются следующие требования:

  1. Не должно содержать конфиденциальную информацию
  2. должно быть достаточно маленьким, чтобы его можно было отправить через интернет
  3. Должен генерироваться легко доступным инструментом (было бы лучше, если бы он был в дистрибутиве Java)

Полный дамп кучи невозможен из-за 1. и 2.

Прежде всего, это должно позволить мне найти утечку. Таким образом, он должен по крайней мере показать размер оставшейся кучи для объектов каждого класса (размер самого себя + все, на что он ссылается). jmap -histo определенно недостаточно хорош.

 num     #instances         #bytes  class name
----------------------------------------------
   1:         14156      577318512  [B
   2:          9196       47439696  [I
   3:         83396        9809992  [C

Что-то подобное вообще полезно? Я так не думаю.

Ответы [ 4 ]

1 голос
/ 01 марта 2012

Не зная немного больше о вас и ваших клиентах, трудно комментировать, но по моему опыту клиент, говорящий мне, что у нас утечка памяти (особенно в Java), просто означает, что «система клиента имеет некоторые проблемы, которые могут или не могут быть связанные с нашим приложением "

Я бы начал с чего-то более простого, выяснив, почему он считает, что в вашем приложении есть утечка (т. Е. Вывод в ps или диспетчере задач, показывающий размеры процессов)

0 голосов
/ 02 марта 2012

Разрешено ли клиенту создавать дамп памяти сам, не отправляя его вам?

Если это возможно, Eclipse Memory Analyzer имеет действительно простой в использовании мастер, который генерируетотчет о подозрении на утечку.Сам отчет очень маленький.

0 голосов
/ 01 марта 2012

Я бы взял дамп кучи и проанализировал бы его с помощью YourKit. (Я обнаружил, что слишком сложно с большими приложениями)

0 голосов
/ 01 марта 2012

Вы можете заставить клиента запускать jhat и каким-либо образом удаленно подключаться к веб-серверу, на котором он запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...