Дано:
- Ubuntu 18.04
- PHP 7.2.2 (cli) (построено: 12 мая 2019 14:29:04) (ZTS)
- Компонент Chilkat 9.5.0.78
Журнал сеанса отключен.
Сценарий работает постоянно, соединение через s sh и остается открытым.
Следующее функция вызывается периодически:
protected function fetchSingle(int $uid)
{
$e = $this->imap->fetchSingleAsMime($uid, true);
}
Это просто для демонстрации того, что RES и% MEM на вершине linux продолжают расти:
И очень важный момент:
после получения нескольких больших писем, если выполняется, затем следующий код:
$this->imap = null;
unset($this->imap);
sleep(324);
Затем RES и% MEM go до исходных значений!
Но без
$this->imap = null;
unset($this->imap);
RES и% MEM остаются высокими значениями!
Логически я могу предсказать эту проблему внутри объекта imap CkImap ...
Что я могу сделать ? Периодически сбрасывать объект CkImap и переподключать - не хорошее решение ...
Почему это так? Может, чилкат хранит данные где-то в себе? И я должен вызвать какой-то метод, чтобы очистить его?
Воспроизводимый код:
<?php
require "core/Chilkat.php";
$ckGlobal = new CkGlobal();
$ckGlobal->UnlockBundle('XXXX');
$imap = new CkImap();
$imap->put_Utf8(true);
$imap->put_Ssl(true);
$imap->put_Port(993);
$imap->put_PeekMode(true);
$imap->Connect('imap');
$imap->Login('login', 'password');
$imap->SelectMailbox('Inbox');
// UID of last message
preg_match('/UID (\d+)/', $imap->sendRawCommand("FETCH * (UID)"), $result);
$i = 0;
while(true){
var_dump('FETCHING');
$mime = $imap->fetchSingleAsMime($result[1], true);
var_dump('SLEEP');
sleep(5);
if(++$i >= 5) {
var_dump('UNSET');
$imap = null;
unset($imap);
sleep(666);
}
}
С помощью приведенного выше кода мы получаем электронную почту каждые 5 секунд, и потребление ОЗУ не останавливается. Но это не должно быть, потому что мы перезаписываем переменную $ mime. И когда imap не установлен - ОЗУ возвращается к первому значению.
get_VerboseLogging
- по умолчанию это false. И режим Peek я тоже пытался установить в false. Ничто не помогло решить или выяснить проблему.
Даже после $imap->Disconnect();
ОЗУ не уменьшится ..