Назад | Перейти на главную страницу

Как мне измерить объем оперативной памяти, необходимый для домена Glassfish?

В нашей тестовой среде у нас есть множество приложений, распределенных по нескольким серверам и доменам Glassfish. Чтобы упростить управление версиями, я хотел бы иметь один домен Glassfish для каждого клиента на каждое приложение (что-то вроде тяжелой версии множества экземпляров причала).

Я слышал, что Glassfish требует больших ресурсов, поэтому я хотел бы приблизительно измерить, сколько экземпляров поместится в доступной оперативной памяти. Я знаю, что могу это сделать, запустив инстансы и наблюдая top вывод, но на какой конкретной статистике мне следует сосредоточиться, чтобы получить точную оценку потребления ресурсов на каждый экземпляр?

С помощью top определение требований к памяти - это больше искусство, чем точная наука. Есть два основных способа сделать это.

В обоих случаях перед запуском исследуемой программы (в вашем случае GlassFish) вы хотите получить базовый уровень использования ресурсов системы. Затем вы идете по одному из двух путей:


Общий путь использования памяти

Это способ я лично делаю это, потому что я чувствую, что это дает лучшую картину общего использования ресурсов.
Кроме того, если вы ошибетесь, вы, вероятно, получите большее число, а не меньшее.

  • Бегать top где-нибудь в терминале и обратите внимание на вывод заголовка.
    Обратите особое внимание на активную и проводную память:

    last pid: 26611;  load averages:  0.50,  0.38,  0.34   up 42+18:51:53  11:44:41
    34 processes:  1 running, 33 sleeping
    CPU:  0.9% user,  0.0% nice,  0.0% system,  0.0% interrupt, 99.1% idle
    Mem: 447M Active, 112M Inact, 233M Wired, 22M Cache, 111M Buf, 170M Free
    Swap: 2048M Total, 220K Used, 2048M Free
    

  • Запустите целевое приложение и обратите внимание на изменение заголовка.

    last pid: 26571;  load averages:  0.35,  0.35,  0.33   up 42+18:49:00  11:41:48
    34 processes:  1 running, 33 sleeping
    CPU:  2.7% user,  0.0% nice,  1.2% system,  0.0% interrupt, 96.1% idle
    Mem: 606M Active, 109M Inact, 235M Wired, 22M Cache, 111M Buf, 12M Free
    Swap: 2048M Total, 224K Used, 2048M Free
    

  • Рассчитайте изменение использованного (Active + wired) и бесплатно (Free) объем памяти.
    В этом случае использованная память увеличилась на 161 МБ ((447 + 233) - (606 + 235)), а свободная память уменьшилась на 158 МБ.
    (При прочих равных, эти числа должны быть одинаковыми или очень близкими, разница компенсируется изменениями в других полях, таких как Неактивная память или Буферное пространство).

  • Самый пессимистичный из приведенных выше чисел - хорошее число, которое можно использовать для предположения об использовании оперативной памяти.
  • Повторите вышеизложенное для дополнительных экземпляров исследуемой программы и нанесите изменение на график, чтобы определить тенденцию / кривую.


    Путь использования памяти отдельного экземпляра

    Этот метод исследует отдельные процессы, связанные с исследуемой программой.
    Действуйте, как указано выше, но не смотрите на top Заголовок output смотрит на отдельные процессы, которые запускаются при запуске программы (в качестве примера я буду использовать Postgres):

      PID USERNAME     THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
     4883 pgsql          1  58    0   181M   146M sbwait  0  24.3H  6.59% postgres
     5842 pgsql          1  44    0   149M   119M sbwait  1 376:03  0.00% postgres
     2051 pgsql          1  44    0 62944K 34836K select  1  21:39  0.00% postgres
     2054 pgsql          1  44    0 31672K  4220K select  1   6:31  0.00% postgres
     2052 pgsql          1  44    0 62944K  5368K select  0   6:00  0.00% postgres
     2053 pgsql          1  44    0 62944K  5484K select  1   1:11  0.00% postgres
     4884 pgsql          1  44    0 62944K  9144K sbwait  1   1:00  0.00% postgres
     1902 pgsql          1  44    0 62944K  5348K select  1   0:46  0.00% postgres
    

    Суммируем резидента (RES) размер для каждого процесса, связанного с вашим приложением, и обратите внимание, что в качестве используемой оперативной памяти. (разница между резидентным размером и виртуальным размером (VSIZE, или просто SIZE).

    При использовании этого метода есть некоторые предостережения:

    1. Инфляция или дефляция размера
      RESРазмер идентификатора не раскрывает всей картины: загружаются общие библиотеки, и они не учитываются в резидентном размере, поэтому, если вы суммируете размер резидента, как я сказал выше, ваше число будет ниже фактического использования.
      Общие библиотеки ЯВЛЯЮТСЯ считается в виртуальном размере, (VIRT или просто SIZE), но они учитываются для каждой программы, использующей их, поэтому, если вы суммируете виртуальный размер, ваше число будет выше фактического использования - часто значительно выше.
      Некоторые версии top также разделите Swap отдельно - если ваша программа имеет утечку памяти (или много данных, которые устаревают и выгружаются), это также может исказить ваши цифры.

    2. Отсутствующие процессы
      Если вы не подсчитываете все связанные процессы, которые возникают в результате запуска вашей программы, ваш общий показатель использования ОЗУ будет ниже фактического.


    Наконец, есть одно предостережение, относящееся к обоим этим методам: Динамические приложения испортят ваши числа.
    Под этим я подразумеваю, что такая программа, как Postgres или Apache, которая либо порождает новые потоки, либо новые дочерние процессы для обслуживания запросов пользователей, не будет давать точной картины в статических условиях: вам нужно создать рабочую нагрузку на программу, чтобы вы могли измерить влияние рабочей нагрузки на систему (это еще одна причина, по которой я считаю, что совокупный путь проще: вам не нужно выслеживать всех дочерних элементов, вы можете просто прочитать заголовок по мере увеличения рабочей нагрузки).

    В идеале вы должны сильно нагружать сервер во время тестирования, чтобы гарантировать, что нормальные производственные нагрузки не заставят его начать загружать пространство подкачки. Кроме того, после того, как вы сделали свой размер, вы всегда должны добавлять немного амортизирующей ОЗУ (я использую 10% сверх наихудших рабочих результатов) и убедитесь, что ваша система имеет достаточно ОЗУ для обработки этого в качестве условия пиковой нагрузки.
    Помните: ОЗУ дешево, а время простоя - дорого. Вы всегда можете добавить больше ОЗУ для решения проблемы во время сборки сервера, и предельные затраты, вероятно, будут ниже, чем необходимость выключения системы для добавления ОЗУ позже.

    Обратите внимание, что все мои top вывод из FreeBSD - ваша конкретная маркировка может отличаться. Обратитесь к странице руководства для top в вашей системе, чтобы определить соответствующие поля.