Как выгрузить модули во время выполнения в mod_perl? - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть Apache с поддержкой mod_perl, в котором работает нативный (обработчики, а не Apache :: Registry или аналогичный) код mod_perl.Как известно, модули могут быть скомпилированы и загружены во время выполнения.Для тестирования у меня есть фиктивный модуль:

package MyPackage;
our $data = '0123456789' x 1000000; # 10 millions characters
1;

Во время выполнения я загружаю его, и мои httpd дочерние процессы добавляют по 10 мегабайт один за другим после нескольких запросов.Это отлично.Таким образом, я иногда могу использовать некоторый код, потребляющий память, но, хотя это случается редко, я хотел бы иметь возможность выгрузить использованный модуль после того, как он выполнил свою работу.

Если вы упомянули об использовании лексических переменных my, я знаю, что они уничтожаются, когда заканчивается область действия.Итак, our или переменные пакета являются важным фактором в этом случае.

Возможно ли получить это во время выполнения?если да, то как это можно сделать?

1 Ответ

2 голосов
/ 02 февраля 2012

Модуль Symbol содержит функцию delete_package, которая берет имя пакета и удаляет все переменные в нем.

Так в вашем случае:

use Symbol 'delete_package';

delete_package 'MyPackage';
...