Xpages / Domino Java Памятка использования памяти - PullRequest
0 голосов
/ 29 мая 2018

У нас периодически возникает проблема с производительностью на одном из наших серверов, о которой сообщили несколько пользователей при использовании одного конкретного приложения XPages.Моей первой мыслью было то, что это было связано с использованием памяти Java и плохой переработкой кода, поэтому я начинаю там.На данный момент, согласно фантастической панели инструментов отладки Марка Леусинка, данные об использовании сервера (64-битная машина Windows с 32 ГБ физической ОЗУ) выглядят так:

enter image description here

Я хотел бы подтвердить мое понимание цифр:

  1. Максимальный размер кучи - Я согласен с этим и знаю, как его изменить (и эторекомендуемая настройка - четверть доступной оперативной памяти, но из-за низкого количества пользователей на этом сервере, я уверен, что 2 ГБ более чем достаточно)
  2. Всего выделено - это кажется низким, ноПравильно ли я в том, что это автоматически устанавливается сервером и что, если требуется больше памяти Java, он будет выделять больше (до объема, указанного в максимальном размере кучи?). Это происходит только в том случае, если сборщик мусора не может освободить достаточно места?загрузить новый объект Java?
  3. Используется - я полагаю, что это показывает использование памяти на сервере, а не только в приложении, содержащем панель инструментов отладки сам.Будет ли это показывать только память, используемую задачей Domino HTTP (так что все приложения XPages), или на нее могут влиять и агенты Java?

Дополнительные вопросы:

  • Как изначально устанавливается «общая сумма»?На сервере разработки у нас (с одним текущим пользователем - мной) в настоящее время установлено значение 256M, но я не могу связать это с какими-либо параметрами Notes.ini.(Кроме того, есть ли рекомендуемое значение для этой цифры?)
  • Если я правильно понял, что сборщик мусора запускается при достижении цифры «Всего выделено», то, вероятно, низкая цифра заставит его работатьчаще.Повлияет ли это на производительность сервера?
  • Следует ли принимать во внимание тот факт, что мы также запускаем Traveler на этом сервере (хотя только с 9 пользователями)?

Спасибо

1 Ответ

0 голосов
/ 29 мая 2018

Информация, отображаемая на панели инструментов, представляет собой стандартные номера, которые предоставляет JVM: totalMemory(), maxMemory() и freeMemory().См. этот вопрос для подробного объяснения.Три значения даны для всей JVM, а не для конкретного приложения.

В JVM Domino HTTP вы можете установить maxMemory с параметром HTTPJVMMaxHeapSize notes.ini.Вы не можете установить / изменить общее выделенное (totalMemory) значение, но это также не требуется.JVM просто выделит больше памяти, когда это будет необходимо (до значения maxMemory).Когда сборка мусора будет выполнена, это в конечном итоге также освободит эту память снова.

Агенты Java не влияют на эти числа.Единственным исключением может быть агент Java, который выполняется в процессе HTTP (например, вызывается из браузера с помощью команды? OpenAgent).

На сервере вы можете столкнуться с проблемами памяти (исключения OutOfMemory), если JVM требуетсябольше памяти, которая может быть выделена.Вы можете отслеживать это значение, создав простой агент XAgent для вывода текущих значений для JVM:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false" viewState="nostate">
  <xp:this.afterRenderResponse><![CDATA[#{javascript:

var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();

response.setContentType("application/json"); 

response.setHeader("Cache-Control", "no-cache");

var max = java.lang.Runtime.getRuntime().maxMemory();
var free = java.lang.Runtime.getRuntime().freeMemory();
var total = java.lang.Runtime.getRuntime().totalMemory();

var memory = {
    max : max,
    total : total,
    free : free,
    available : (max - total) + free
};

writer.write( toJson(memory) ); 

writer.endDocument();
}]]>
  </xp:this.afterRenderResponse>
</xp:view>
...