ФОН: Я просто перенес свой проект на другой сервер (совместно используемый DigitalOcean, самое дешевое предложение) с CentOS и заметил, что функции imap в PHP на новом сервере занимают больше места, чем на старом (например, в 10 раз больше).
Старый сервер является выделенным сервером, и почтовый сервер также размещается на старом сервере, на котором я пытаюсь выполнить действия imap.
ВАЖНЫЙ: Я не думаю, что это замедление связано с тем, что мы больше не пытаемся подключиться с одного и того же физического сервера к почтовому серверу из-за значительного увеличения времени, необходимого для запуска любой функции imap в моем проекте, но не для всех может доказать, что я не прав, потому что, к сожалению, я ничего не знаю о сетях 🙁
Я сделал несколько простых тестов времени выполнения скриптов на обоих серверах, создав два php-файла и протестировав время выполнения обоих: один с использованием только функций php imap (imap_open), а другой — с пакетом PEAR Net_IMAP. Вот два сценария:
СЦЕНАРИЙ 1:
$start=microtime(true);
$temp=$start;
$mbox = imap_open ("{mymailserver:143/novalidate-cert}INBOX", "[email protected]", "password");
telltime($start, "Connect and Login", $temp);
$mbox = imap_reopen ($mbox,"{mymailserver:143/novalidate-cert}INBOX.Sent");
telltime($start, "Changefolder", $temp);
telltime($start, "End script");
СЦЕНАРИЙ 2:
require_once 'Net/IMAP.php';
$imapServer = new Net_IMAP('mymailserver', 143);
telltime($start, "Connect", $temp);
$loggedIn = $imapServer->login('[email protected]' , 'password');
telltime($start, "Login", $temp);
$imapServer->selectMailbox("INBOX.Sent");
telltime($start, "Change folder", $temp);
telltime($start, "End script");
Я запустил эти сценарии следующим образом, со следующими результатами:
СЦЕНАРИЙ 1 КАК ЕСТЬ — старый сервер
Подключение и логин: 0.124350070953
Папка изменений: 0,00585293769836
Все время: 0.130313158035
СЦЕНАРИЙ 1 КАК ЕСТЬ — новый сервер
Подключение и логин: 0.63277888298035
Папка изменений: 0.15838479995728
Все время: 0.79174709320068
СЦЕНАРИЙ 1 / novalidate-cert изменен на / notls — старый сервер
Подключиться и войти: 0.112071990967
Папка изменений: 0.00407910346985
Все время: 0.116246938705
СЦЕНАРИЙ 1 / novalidate-cert изменен на / notls — новый сервер
Подключение и логин: 0.50686407089233
Папка изменений: 0.17428183555603
Все время: 0.68127012252808
SCRIPT 2 AS IS — новый сервер
Connect: 0.42295503616333
Логин: 0.4013729095459
Изменить папку: 0.057337045669556
Конечный скрипт: 0.88185501098633
Проект также имеет консольную систему отладки, из которой мне удалось собрать следующую информацию:
— средний поиск в почтовом ящике занимает около 0,01-0,02 секунды на старом сервере, в то время как на новом сервере тот же поиск занимает примерно в 7-8 раз больше
— загрузка одного электронного письма с почтового сервера на старом сервере занимает от 0,05 с до 0,1 с, в то время как на новом сервере существуют электронные письма (в основном те, которые имеют текст / HTML с вложенными файлами изображений), которые принимают 4 секунды, чтобы получить
Основываясь на этих результатах, я предполагаю, что сталкиваюсь с проблемой сети, но это просто дикое предположение, поскольку до сих пор я никогда не отлаживал сетевые ошибки, но я уже разобрал свои php-скрипты и не могу найти любая ошибка в них.
Я старался трассировка-и пинг-При использовании почтового сервера из новой среды проекта, я получил следующие результаты:
traceroute to mymailserver (xxx.xxx.xxx.xx), 30 hops max, 60 byte packets
1 xxx.xxx.x.xxx 0.658 ms xxx.xxx.x.xxx 0.510 ms xxx.xxx.x.xxx 0.471 ms
2 xxx.xxx.xxx.xxx 0.434 ms xxx.xxx.xxx.xxx 0.333 ms xxx.xxx.xxx.xxx 0.247 ms
3 xxx.xxx.xxx.xx 0.984 ms 0.986 ms xxx.xxx.xxx.xxx 0.270 ms
4 xxx.xxx.xxx.xx 0.964 ms xxx.xxx.xx.xxx 1.414 ms 1.449 ms
5 xxx.xxx.xx.xxx 1.253 ms 1.211 ms xxx.xxx.xx.xxx 22.078 ms
6 xxx.xxx.xx.xxx 43.920 ms 41.971 ms 44.860 ms
7 xx.xx.xx.xxx 45.835 ms xxx.xxx.xx.xxx 42.055 ms 41.254 ms
8 * xxx.xxx.xxx.xxx 42.999 ms *
9 xxx.xxx.xxx.xx 41.989 ms 42.235 ms 44.925 ms
Да, иногда traceroute сообщает о потерянных пакетах, но не всегда, но остальная часть этой информации, к сожалению, только для меня, потому что я не понимаю, что мне нужно искать, и я не нашел никакого полезного учебника для traceroute в интернете.
** ДРУГАЯ ИНФОРМАЦИЯ НА ОСНОВЕ ПОМОЩИ ОТ ДРУГИХ ПОЛЬЗОВАТЕЛЕЙ STACKOVERFOW: **
Я также скачал xDebug и попробовал отследить функции двух вышеупомянутых скриптов. Хотя я не получил никакой полезной информации с помощью функции трассировки функции imap_open, я заметил, что когда я выполняю трассировку пакета PEAR, функция fgets (), выполняемая где-то в классе, занимает значительно больше времени, чем любая другая функция, выполняется (около 0,05 секунд)
Мои вопросы):
— Правильно ли я предполагаю из этой информации, что это должно быть проблемой с сетью?
— Если да, то как я могу решить это, или каковы раздачи, что это действительно проблема с сетью?
— Если нет, как я мог бы лучше изолировать проблему и найти решение?
Я предлагаю:
— спасибо, кто-то, кто помогает мне изолировать, если это проблема с сетью, или что-то еще
— щедрость, если кому-то удастся помочь мне решить эту проблему и ускорить обработку функций imap
Задача ещё не решена.
Других решений пока нет …