[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 574: sizeof(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 630: sizeof(): Parameter must be an array or an object that implements Countable
Russian Progress User Group • Использование памяти
Страница 1 из 1

Использование памяти

Добавлено: 19 май 2017, 11:48
dmikai
Доброго Вам дня, Форумчане

Столкнулся с такой проблемой:
Есть две сессии Progress (Linux, CHUI). Одна подсоединяется через shared-memory, а другая по сервису.
В каждой сесии выполняем один и тот же запрос по абсолютно любой, но большой таблице.
В итоге сессия с использованием подключения по сервису память не скушала, а вот у второй
наблюдается аппетит - и сразу прирост в 130М, и далее не отпускает.

Можно ли этому дать объяснение?

OpenEdge Release 11.6.2.002, Linux 64bit

Re: Использование памяти

Добавлено: 22 май 2017, 19:04
George
Я не изучал этот вопрос и потому далее идут только мои предположения.

Скорее всего самообслуживающийся клиент при первом обращении к базе подключает к своему адресному пространству (a.k.a. к "памяти") некоторые разделяемые библиотеки. Эта память является разделяемой, т.е. даже если запущена тысяча самообслуживающихся клиентских сессий и адресное пространство каждой сессии после первого обращения к таблице прирастает на 150 MB, то на самом деле свободная память в системе не уменьшится ни на 150 GB (= 1000 * 150 MB), ни даже на 150 MB. Можно стартовать одну сессию, которая напрямую подключается к базе. Еще раз проверить как изменилось адресное пространство этой сессии после обращения к базе. Затем, используя другое логическое имя, подключится к той же базе еще раз. Предполагаю, что запрос, использующий новое логическое имя базы, больше не увеличит "память" сессии поскольку к этой сессии уже подключены нужные разделяемые библиотеки. А можно второй раз подключиться к действительно другой базе. Полагаю, что результат от этого не изменится.

К памяти сессий с удаленным подключением к базам эти разделяемые библиотеки не добавляются потому, что эти библиотеки уже подключены к серверам удаленных клиентов. В этом и состоит смысл разделяемых библиотек - они добавляются в адресное пространство только тех процессов, которым нужен функционал, реализованный в данных библиотеках.