powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Memory Leak?
15 сообщений из 40, страница 2 из 2
Memory Leak?
    #39867398
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если 88 это кол-во класслоадеров - то IMHO их как-то многовато. Оставание в памяти класслоадера == "классический баг с редиплоем"

IMHO & AFAIK

1) поскольку он классический, читать доки из-за чего такое происходит и как этого избежать (он вроде как-то связан с не очень хорошими практиками в пользовательском коде)
2) возможно менять версию сервера (ставить патчи) или даже сам сервер на другой (как минимум в томкатах с ним боролись из версии к версии)
3) забить нано-болт и вместо редиплоя перегружать сервер
...
Рейтинг: 0 / 0
Memory Leak?
    #39867399
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А 88 класслоадеров это много? Мне кажется зависит от.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867406
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА 88 класслоадеров это много? Мне кажется зависит от.
Мне не очень понятно, что это за цифра 88 (((

если это байт - то тогда мало
если кол-во в шутках - то тогда IMHO много
...
Рейтинг: 0 / 0
Memory Leak?
    #39867407
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevmaytonА 88 класслоадеров это много? Мне кажется зависит от.
Мне не очень понятно, что это за цифра 88 (((

если это байт - то тогда мало
если кол-во в шутках - то тогда IMHO много
В данном случае 88 - это Shallow Heap - количество байт, которое объект занимает в памяти сам по себе.
Сколько там класслоадеров история умалчивает
...
Рейтинг: 0 / 0
Memory Leak?
    #39867409
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что нужно позвать программиста который знает этот бизнес-домен.
И показать ему содержание зубчатого массива byte[461][] и спросить что єто
за данные? И ответ придет очень быстро. От данных пойдем к коду который их продуцирует.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867566
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
maytonЯ думаю что нужно позвать программиста который знает этот бизнес-домен.
И показать ему содержание зубчатого массива byte[461][] и спросить что єто
за данные? И ответ придет очень быстро. От данных пойдем к коду который их продуцирует.Я знаю бизнес-домен и нашел, какой запрос выполняется, с каким параметром. Но не воспроизводится в "тепличных условиях", т.е. если просто дернуть REST-метод. Возможно, фактора редеплоя не хватает.

Меня смущает этот огромный ArrayList, в котором лежат массивы байтов. Учитывая, что в нем лежат не java-объекты, а некое сериализованное представление доменных объектов, начинаю подозревать postgresql драйвер. Только не воспроизводится, зараза ((

А можно ли как-нибудь из анализа heap dump определить, в какой точке стектрейса определена локальная переменная?
...
Рейтинг: 0 / 0
Memory Leak?
    #39867579
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
WGAА можно ли как-нибудь из анализа heap dump определить, в какой точке стектрейса определена локальная переменная?В смысле, в каком методе определена.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867586
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAWGAА можно ли как-нибудь из анализа heap dump определить, в какой точке стектрейса определена локальная переменная?В смысле, в каком методе определена. Локальные переменные же создаются в стековой памяти, а не в куче. Они GC напрягать вроде как не могут.

У тебя поля каких объектов, ссылки на которые так и остаются и могут быть собраны GC.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867696
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Я нашел, где сжирается такое огромное количество памяти, посмотрев на исходники JDBC драйвера Postgresql .
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
  protected void processResults(ResultHandler handler, int flags) throws IOException {
    boolean noResults = (flags & QueryExecutor.QUERY_NO_RESULTS) != 0;
    boolean bothRowsAndStatus = (flags & QueryExecutor.QUERY_BOTH_ROWS_AND_STATUS) != 0;

    List<byte[][]> tuples = null;

    int c;
    boolean endQuery = false;

    // At the end of a command execution we have the CommandComplete
    // message to tell us we're done, but with a describeOnly command
    // we have no real flag to let us know we're done. We've got to
    // look for the next RowDescription or NoData message and return
    // from there.
    boolean doneAfterRowDescNoData = false;

    while (!endQuery) {
      c = pgStream.receiveChar();
      switch (c) {
............................
        case 'D': // Data Transfer (ongoing Execute response)
          byte[][] tuple = null;
          try {
            tuple = pgStream.receiveTupleV3();
          } catch (OutOfMemoryError oome) {
            if (!noResults) {
              handler.handleError(
                  new PSQLException(GT.tr("Ran out of memory retrieving query results."),
                      PSQLState.OUT_OF_MEMORY, oome));
            }
          }

Вот только для этой компании нет столько данных. И вообще данных немного.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867704
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
WGAWGAА можно ли как-нибудь из анализа heap dump определить, в какой точке стектрейса определена локальная переменная?В смысле, в каком методе определена.Насколько я знаю, переменная непримитивного типа - это ссылка. Сама переменная живет в стеке, а вот данные - в куче. С трудом представляю себе 1 гигабайт в стеке...

В общем, источник OOM локализован, вопрос закрыт. Осталось понять, на каких данных все это происходит.
Всем спасибо.
...
Рейтинг: 0 / 0
Memory Leak?
    #39867722
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGA,
в этом цикле в исходниках драйвера
Код: java
1.
    while (!endQuery) {

посмотри где endQuery присваивается true и почему этого не происходит.
И кроме того, можно посмотреть, что за запрос выполнялся. На потоке вызвать контекстное меню java basics - Thread overview and stacks - и там для каждой строки стека будут доступны локальные переменные. Найди в этом стеке SQL и проверь
...
Рейтинг: 0 / 0
Memory Leak?
    #39867756
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
ivanraWGA,
в этом цикле в исходниках драйвера
Код: java
1.
    while (!endQuery) {

посмотри где endQuery присваивается true и почему этого не происходит.
И кроме того, можно посмотреть, что за запрос выполнялся. На потоке вызвать контекстное меню java basics - Thread overview and stacks - и там для каждой строки стека будут доступны локальные переменные. Найди в этом стеке SQL и проверьПро endQuery верно подмечено, спасибо. Это локальная переменная, переключается в true на определенные коды-команд транспортного протокола. В это switch'е это
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
// эта ветка неинтересна
        case 'S': // Parameter Status
          try {
            receiveParameterStatus();
          } catch (SQLException e) {
            handler.handleError(e);
            endQuery = true;
          }
          break;
...............
// а вот здесь возможно зацикливание, при изменении статуса транзакции
        case 'Z': // Ready For Query (eventual response to Sync)
          receiveRFQ();
          if (!pendingExecuteQueue.isEmpty() && pendingExecuteQueue.peekFirst().asSimple) {
            tuples = null;

            ExecuteRequest executeRequest = pendingExecuteQueue.removeFirst();
            // Simple queries might return several resultsets, thus we clear
            // fields, so queries like "select 1;update; select2" will properly
            // identify that "update" did not return any results
            executeRequest.query.setFields(null);

            pendingDescribePortalQueue.removeFirst();
            if (!pendingExecuteQueue.isEmpty()) {
              if (getTransactionState() == TransactionState.IDLE) {
                handler.secureProgress();
              }
// вот здесь!!!
              // process subsequent results (e.g. for cases like batched execution of simple 'Q' queries)
              break;
            }
          }
          endQuery = true;
...
Рейтинг: 0 / 0
Memory Leak?
    #39867910
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если "....И похоже, что они остаются в памяти только при редеплое, иначе бы прод бы падал с завидной регулярностью, чего нет в действительности... " и "...при редеплое ссылки остаются и держат как heap, так и metaspace,..." правда, то смысла копаться в коде нет.

Ну не работает редиплой и не работает. Честно говоря, мне проблема вообще не понятна, вместо редиплоя перегрузить сервер и не парится. Или читать доки по Вашему апп-серверу и патчить или брать нормальный app сервер.

сколько программистов нужно. что бы починить редиплой - ни одного, it is a problem of system administrator

IMHO & AFAIK

p.s.
в 10-ой версии точно баги были, гугля тут же нашел WFLY-7037 от 17 года.
и в 8-ой версии были WFLY-6173
p.p.s.
опен соурс, он и есть опен соурс ))) работа программистов видна: одни программисты баги чинят, другие программисты их обратно вносят )))
...
Рейтинг: 0 / 0
Memory Leak?
    #39871281
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли 88 это кол-во класслоадеров - то IMHO их как-то многовато. Оставание в памяти класслоадера == "классический баг с редиплоем"

IMHO & AFAIK

1) поскольку он классический, читать доки из-за чего такое происходит и как этого избежать (он вроде как-то связан с не очень хорошими практиками в пользовательском коде)
2) возможно менять версию сервера (ставить патчи) или даже сам сервер на другой (как минимум в томкатах с ним боролись из версии к версии)
3) забить нано-болт и вместо редиплоя перегружать сервер
где то читал что если делать постоянно редеплой, то сервер начинает дозабивать пермген до тех пор пока он не кончится. а потом да он кончается и всё. но вроде пермген убрали в 8+? не?
...
Рейтинг: 0 / 0
Memory Leak?
    #39871311
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTLeonid KudryavtsevЕсли 88 это кол-во класслоадеров - то IMHO их как-то многовато. Оставание в памяти класслоадера == "классический баг с редиплоем"

IMHO & AFAIK

1) поскольку он классический, читать доки из-за чего такое происходит и как этого избежать (он вроде как-то связан с не очень хорошими практиками в пользовательском коде)
2) возможно менять версию сервера (ставить патчи) или даже сам сервер на другой (как минимум в томкатах с ним боролись из версии к версии)
3) забить нано-болт и вместо редиплоя перегружать сервер
где то читал что если делать постоянно редеплой, то сервер начинает дозабивать пермген до тех пор пока он не кончится. а потом да он кончается и всё. но вроде пермген убрали в 8+? не?

Дело не в пермгене , если все правильно сделать то не будет никаких ликов
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Memory Leak?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]