Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Как Lotus Domino использует память в AIX

Эдди Белл, программист, IBM
В 1994 г. Эдди Белл (Eddy Bell) ушел из Sun Microsystems, где он работал над эмуляцией на ПК продуктов 386i, SunPC и WABI, и перешел на Lotus. Эдди был архитектором/руководителем проекта Lotus по переносу Lotus Notes/Domino с платформы Windows на UNIX. В настоящее время он является архитектором сервисов Lotus Domino, связанных с различными платформами и ОС .

Описание:  Из данной статьи вы узнаете о распределении сегментов памяти IBM AIX для сервера Lotus Domino и о том, как настроить в конфигурационном файле Nites.ini параметры ConstrainedSHMSizeMB и PercentAvailSysResources для изменения распределения памяти сервера.

Дата:  17.04.2009
Уровень сложности:  простой
Активность:  1716 просмотров
Комментарии:  


[Примечание редактора: диаграммы, используемые в этой статье, изначально опубликованы в руководстве IBM Redbook Разработка и перенос приложений С и С++ на AIX. .]

Платформа IBM AIX управляет памятью не так, как другие платформы, на которых работает Lotus Domino. AIX использует сегментную архитектуру, у которой есть свои плюсы и минусы. Основное преимущество - это увеличение быстродействия. Среди недостатков - то, что 32-разрядные программы должны поддерживать сегментную архитектуру для использования всех возможностей 32-разрядной адресации. В данной статье описаны возможные варианты распределения сегментов для 32-разрядного приложения на платформе AIX, а также рассказано о распределении, которое в настоящее время используется в Lotus Domino. Показано, что происходит с распределением сегментов, если использовать различные опции Domino для работы с памятью.

Эта статья предназначена для опытных системных администраторов Lotus Domino, работающих с платформой AIX.

Распределение сегментов

По умолчанию 32-разрядное виртуальное адресное пространство в AIX состоит из 16 сегментов, по 256 МБ в каждом. Для любого приложения, которое использует распределение сегментов по умолчанию, виртуальное адресное пространство выглядит так, как показано на рисунке 1:

  • Первый сегмент (0х0) используется для текста и данных ядра
  • Второй сегмент (0х1) используется для текста пользователя.
  • Третий сегмент (0х2) используется для стека и данных пользователя.
  • Сегменты с четвертого по тринадцатый (от 0х3 до 0хС) доступны для процесса пользователя, если вызваны функции shmat() или mmap().
  • Четырнадцатый сегмент (0xD) зарезервирован для текста общих библиотек.
  • Пятнадцатый сегмент (0xE) доступен для процесса пользователя.
  • Последний сегмент (0xF) используется для предварительной обработки данных общих библиотек.

Для тех, кто не знаком с терминами, использованными на рисунке 1, приведем пояснения:

  • Текст. Исполняемый код, доступный только для чтения и выполнения. Он может быть одним из трех типов: код ядра, код пользователя и код общих библиотек.
  • Данные. Пространство для чтения/записи данных, которое может быть одним из трех типов: данные ядра, данные пользователя и данные общих библиотек.

Примечание: Shmat() и mmap() используются в Lotus Domino для доступа к общей памяти.


Рисунок 1. Пример виртуального адресного пространства
Пример виртуального адресного пространства

Программы, которые используют модель большой памяти AIX (large memory model), имеют следующее распределение памяти, показанное на рисунке 2:

  • Первый сегмент (0x0) используется для текста и данных ядра
  • Второй сегмент (0х1) используется для текста пользователя.
  • Третий сегмент (0х2) используется для стека пользователя и данных.
  • Сегменты с четвертого по седьмой (0x3 до 0x6) зарезервированы динамической памятью процесса.
  • Сегменты с восьмого по тринадцатый (0x7 до 0xC) доступны для процесса пользователя, если вызваны shmat() или mmap().
  • Четырнадцатый сегмент (0xD) зарезервирован для общих библиотек.
  • Пятнадцатый сегмент (0xE) доступен для процесса пользователя.
  • Последний сегмент (0xF) используется для предварительной обработки данных общих библиотек.

Текущая версия Lotus Domino использует модель большой памяти AIX.


Рисунок 2. Модель большой памяти AIX
Модель большой памяти AIX

В AIX 5L версии 5.2 и более поздних имеется модель очень большой памяти (very large memory model). Эта модель, которую мы надеемся использовать в будущем с Lotus Domino, сейчас не используется. Эта модель имеет три формы: первая форма для программ, которые имеют динамическую память процесса (данные пользователя) меньше 2,5 ГБ и больше 256 МБ (см. рисунок 3). Эта модель выглядит похоже на распределение сегментов в AIX по умолчанию, но сегменты с четвертого по восьмой (0x3 по 0x7) доступны для динамической памяти пользователя (heap), если используется динамическое распределение сегментов (dynamic segment allocation - DSA). Также сегменты с 0xA по 0xE доступны для процесса пользователя, если вызваны shmat() или mmap() при помощи динамического распределения сегментов.


Рисунок 3. Модель очень большой памяти AIX: первая форма.
Модель очень большой памяти AIX: первая форма

Вторая форма модели очень большой памяти предназначена для программ, у которых динамическая память (heap) процесса больше, чем 2,5 ГБ, как показано на рисунке 4, в котором:

  • Первый сегмент (0x0) зарезервирован для текста и данных ядра.
  • Второй сегмент (0х1) зарезервирован для текста пользователя.
  • Третий сегмент (0x2) используется для стека пользователя. Однако общие библиотеки и данные также используются в этом сегменте (0x2).
  • Сегменты с четвертого по шестнадцатый (0x3 по 0xF) доступны для динамической памяти пользователя (heap), если используется динамическое распределение сегментов.
  • Сегменты с 0xB по 0xF доступны для процесса пользователя, если вызваны shmat() или mmap() при помощи динамического распределения сегментов.

Рисунок 4. Модель очень большой памяти AIX: вторая форма.
Модель очень большой памяти AIX: вторая форма.

Третья форма предназначена для программ, у которых динамическая память процесса (heap) меньше, чем 256 МБ (см. рисунок 5). В этой форме:

  • Первый сегмент (0x0) используется для текста и ядра данных.
  • Второй сегмент (0х1) используется для текста пользователя.
  • Третий сегмент (0x2) используется для стека и данных пользователя. Однако общие библиотеки и данные также могут храниться в этом сегменте.
  • Остальные сегменты (0x3 по 0xF) доступны для процесса пользователя, если вызваны shmat() или mmap() при помощи динамического распределения сегментов.

Рисунок 5. Модель очень большой памяти AIX: третья форма.
Модель очень большой памяти AIX: третья форма.

Опции управления памятью Lotus Domino

Теперь, когда у вас есть общее представление о моделях памяти AIX, давайте рассмотрим модель, которую использует Lotus Domino, и узнаем, как опции управления памятью Domino изменяют виртуальное адресное пространство.

В оставшейся части статьи мы расскажем, как изменять разметку сегментов с помощью настроек конфигурации сервера Domino в файле Notes.ini. Перед тем как вы продолжите, прочитайте термины, которые помогут вам лучше понять таблицы.

  • Название программы. Пример типового приложения Domino.
  • Текст и данные ядра. Общая память.
  • Текст пользователя. Общая память для всех программ с одним и тем же исполняемым файлом (например, три задачи обновления используют один участок памяти, общий для всех трех задач).
  • Стек пользователя. Это сегмент уникален для каждого процесса.
  • Динамическая память процесса. Этот сегмент уникален для каждого процесса.
  • Общая память. Этот сегмент общий для всех процессов Domino.
  • Текст общей библиотеки. Этот сегмент общий для всех процессов в системе.
  • Недоступный сегмент. Пока этот сегмент не используется в Lotus Domino.
  • Данные общей библиотеки. Этот сегмент уникален для каждого процесса.
  • Не-Domino. . Этот общий сегмент, который используется независимыми приложениями.

Общие данные программы, доступные для всех приложений Domino, начинаются с 256 МБ и растут сегментами по 256 МБ до тех пор, пока не будет достигнуто максимальное число свободных сегментов.

Первая таблица показывает результаты без использования настроек памяти в Domino.

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
512 МБ
Общая память
2 ГБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 и 56 по 13141516
HTTP1234 и 56 по 13141516
Обновления1234 и 56 по 13141516
N/A1234 и 56 по 13141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 512 МБ2048 МБ0 МБ

Ниже приведено распределение общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 750 МБ
  • Другая общая память Domino = 1250 МБ

Изменение настроек ConstrainedSHMSizeMB

Параметр ConstrainedSHMSizeMB из файла Notes.ini сервера Dominoограничивает общую память. Эти параметры настройки можно использовать двумя способами. Если ConstrainedSHMSizeMB=1, тогда общая память ограничена размером по умолчанию. В AIX этот размер составляет 2,25 ГБ. Кроме того, для этого параметра настройки можно указать размер в мегабайтах, что мы и сделали в данной статье для демонстрации. Например, если вы выставите такой параметр настройки:

ConstrainedSHMSizeMB = 1744

то получите результаты, приведенные в таблице.

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
512 МБ
Общая память
1.744 ГБ
Не-Domino
256 МБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 и 56 по 1213141516
HTTP1234 и 56 по 1213141516
Обновления1234 и 56 по 1213141516
N/A1234 и 56 по 1213141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 512 МБ1744 МБ256 МБ

Такова схема распределения общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 654 МБ
  • Другая общая память Domino = 1099 МБ

Если вы задали в файле Notes.ini конфигурацию ConstrainedSHMSizeMB= 1744 и установили значение 3 для dataseg (количество используемых сегментов данных), то получите следующие результаты:

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
768 МБ
Не-Domino
1.744 ГБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 по 67 по 13141516
HTTP1234 по 67 по 13141516
Обновления1234 по 67 по 13141516
N/A1234 по 67 по 13141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 768 МБ1744 МБ0 МБ

Ниже приведена схема распределения общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 654 МБ
  • Другая общая память Domino = 1099 МБ

В следующей таблице ConstrainedSHMSizeMB равен 1024.

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
512 МБ
Общая память
1024 МБ
Не-Domino
1024 МБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 и 56 по 910 по 13141516
HTTP1234 и 56 по 910 по 13141516
Обновления1234 и 56 по 910 по 13141516
N/A1234 и 56 по 910 по 13141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 512 МБ1024 МБ1024 МБ

Ниже приведена схема распределения общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 384 МБ
  • Другая общая память Domino = 640 МБ

Изменение настроек PercentAvailSysResources

Параметр PercentAvailSysResources из файла Notes.ini сервера Domino позволяет управлять распределением памяти на своем сервере. Допустимые значения для настройки лежат в диапазоне от 2 до 100 процентов. В следующей таблице PercentAvailSysResources установлено на 25 % для системы с 4 ГБ памяти. Другими словами, 1 ГБ памяти был выделен под сервер Domino.

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
512 МБ
Общая память
2048 МБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 и 56 по 13141516
HTTP1234 и 56 по 13141516
Обновления1234 и 56 по 13141516
N/A1234 и 56 по 13141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 512 МБ2028 МБ0 МБ

Ниже приведена схема распределения общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 384 МБ
  • Другая общая память Domino = 1664 МБ

В этой конфигурации в настройках буферного пула NSF используется 3/8* (ОЗУ * ,25). Не определено ограничение для увеличения совместно используемой памяти Domino, кроме ограничений на сегменты, задаваемых операционной системой.

Следующая таблица покажет результаты настроек NSF_BUFFER_POOL_SIZE_MB = 512 и PercentAvailSysResources=25 в файле Notes.ini.

Название программыТекст/данные ядра
256 МБ
Текст пользователя
256 МБ
Стек пользователя
256 МБ
Динамическая память процесса (heap)
512 МБ
Общая память
2048 МБ
Текст общих библиотекНедоступный сегментДанные общих библиотек
Сервер1234 и 56 по 13141516
HTTP1234 и 56 по 13141516
Обновления1234 и 56 по 13141516
N/A1234 и 56 по 13141516
Обработка стекаОбработка пользовательских данныхОбщая память DominoИспользование общей памяти сторонним API
256 МБ 512 МБ2028 МБ0 МБ

Ниже приведена схема распределения общей памяти:

  • Буферный пул NSF (UBM=3/8 shm) = 512 МБ
  • Другая общая память Domino = 1536 МБ

В этой конфигурации параметры настройки буферного пула NSF заданы явным образом, и параметр PercentAvailSysResources игнорируется. Не определено ограничение для увеличения общей памяти Domino, кроме ограничений на сегменты, задаваемых операционной системой.


Рекомендации

Мы не советуем вам использовать параметр ConstrainedSHMSizeMB. В используемый в данный момент модели большой памяти AIX ConstrainedSHMSizeMB следует использовать только для поддержки приложений сторонних разработчиков, которым необходима общая память. Если вы используете эту настройку, то Lotus Domino получает меньше виртуального адресного пространства для работы. Это отличается от других платформ, на которых работает Domino. На других платформах, при использовании ConstrainedSHMSizeMB для сокращения общей памяти автоматически увеличивается пространство для данных приложения.

Для демонстрации приведем пример: На сервере Domino запущен сильно загруженный сервер Lotus Domino Web Access HTTP, которому необходимо 1024 МБ пространства для данных. В AIX установим dataseg –f 4* в программном каталоге Domino, чтобы разрешить всем программным файлам Domino использовать четыре сегмента собственной памяти. На других платформах необходимо использовать размер виртуального адресного пространства, заданный операционной системой. Затем вычитаем пространство, используемое текстом программы и текстом общих библиотек. Таким образом мы получаем размер виртуального пространства данных, доступного для Lotus Domino. В этом примере мы вычитаем 1024 МБ из виртуального пространства данных, доступного для Lotus Domino и используем это значение для установки значения ConstrainedSHMSizeMB.


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

В 1994 г. Эдди Белл (Eddy Bell) ушел из Sun Microsystems, где он работал над эмуляцией на ПК продуктов 386i, SunPC и WABI, и перешел на Lotus. Эдди был архитектором/руководителем проекта Lotus по переносу Lotus Notes/Domino с платформы Windows на UNIX. В настоящее время он является архитектором сервисов Lotus Domino, связанных с различными платформами и ОС .

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=383244
ArticleTitle=Как Lotus Domino использует память в AIX
publish-date=04172009
author1-email=eddy@us.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).