Доброго Вам дня, Форумчане
Столкнулся с такой проблемой:
Есть две сессии Progress (Linux, CHUI). Одна подсоединяется через shared-memory, а другая по сервису.
В каждой сесии выполняем один и тот же запрос по абсолютно любой, но большой таблице.
В итоге сессия с использованием подключения по сервису память не скушала, а вот у второй
наблюдается аппетит - и сразу прирост в 130М, и далее не отпускает.
Можно ли этому дать объяснение?
OpenEdge Release 11.6.2.002, Linux 64bit
Использование памяти
Re: Использование памяти
Я не изучал этот вопрос и потому далее идут только мои предположения.
Скорее всего самообслуживающийся клиент при первом обращении к базе подключает к своему адресному пространству (a.k.a. к "памяти") некоторые разделяемые библиотеки. Эта память является разделяемой, т.е. даже если запущена тысяча самообслуживающихся клиентских сессий и адресное пространство каждой сессии после первого обращения к таблице прирастает на 150 MB, то на самом деле свободная память в системе не уменьшится ни на 150 GB (= 1000 * 150 MB), ни даже на 150 MB. Можно стартовать одну сессию, которая напрямую подключается к базе. Еще раз проверить как изменилось адресное пространство этой сессии после обращения к базе. Затем, используя другое логическое имя, подключится к той же базе еще раз. Предполагаю, что запрос, использующий новое логическое имя базы, больше не увеличит "память" сессии поскольку к этой сессии уже подключены нужные разделяемые библиотеки. А можно второй раз подключиться к действительно другой базе. Полагаю, что результат от этого не изменится.
К памяти сессий с удаленным подключением к базам эти разделяемые библиотеки не добавляются потому, что эти библиотеки уже подключены к серверам удаленных клиентов. В этом и состоит смысл разделяемых библиотек - они добавляются в адресное пространство только тех процессов, которым нужен функционал, реализованный в данных библиотеках.
Скорее всего самообслуживающийся клиент при первом обращении к базе подключает к своему адресному пространству (a.k.a. к "памяти") некоторые разделяемые библиотеки. Эта память является разделяемой, т.е. даже если запущена тысяча самообслуживающихся клиентских сессий и адресное пространство каждой сессии после первого обращения к таблице прирастает на 150 MB, то на самом деле свободная память в системе не уменьшится ни на 150 GB (= 1000 * 150 MB), ни даже на 150 MB. Можно стартовать одну сессию, которая напрямую подключается к базе. Еще раз проверить как изменилось адресное пространство этой сессии после обращения к базе. Затем, используя другое логическое имя, подключится к той же базе еще раз. Предполагаю, что запрос, использующий новое логическое имя базы, больше не увеличит "память" сессии поскольку к этой сессии уже подключены нужные разделяемые библиотеки. А можно второй раз подключиться к действительно другой базе. Полагаю, что результат от этого не изменится.
К памяти сессий с удаленным подключением к базам эти разделяемые библиотеки не добавляются потому, что эти библиотеки уже подключены к серверам удаленных клиентов. В этом и состоит смысл разделяемых библиотек - они добавляются в адресное пространство только тех процессов, которым нужен функционал, реализованный в данных библиотеках.