Тестирование производительности серверов хостинга

P
На сайте с 16.03.2009
Offline
144
#451
iHead:
Я лично видел несколько криво настроенных серверов с sendmail, где вызов этой функции может занимать десятки секунд. Допускаю, что проблема может быть также под виндами, где эта функция обычно делает коннект к SMTP-серверу (проблема доступности сервера). Письма в Битриксе отправляются "агентом", который по дефолту срабатывает на хитах к сайту.
Так что этот тест вполне годный для выявления явных проблем с работой почты.

Что же там было криво настроено? Без общих слов, конкретно, с примером конфига.

Долгий вызов mail() или других функций (например curl) -> происходит из-за нехватки свободных PHP процессов.

Например, сделайте 1 процесс PHP-FPM и зажмите F5.

Наглядно, исходник теста

   function GetPHPMailMark() 
{
$res = array();
$addr = "hosting_test@bitrix.ru";
$subj = "Bitrix server test";
$body = "This is test message. Delete it.";

$s1 = getmicrotime();
bxmail($addr, $subj, $body);
$e1 = getmicrotime();
$t1 = $e1 - $s1;

return $t1;
}

А вот сама функция -> отправляет через обычный mail или через PHPMailer.

function bxmail($to, $subject, $message, $additional_headers="", $additional_parameters="") 
{
if(function_exists("custom_mail"))
return custom_mail($to, $subject, $message, $additional_headers, $additional_parameters);

if($additional_parameters!="")
return @mail($to, $subject, $message, $additional_headers, $additional_parameters);

return @mail($to, $subject, $message, $additional_headers);
}

Считать ms (microtime) и давать какие-то оценки или даже формировать рейтинг на основе этого теста - просто маркетинг.

The test was based on a simple computer with Intel® Core™2 Duo CPU E4500 2.20GHz, 2Gb RAM and 250Gb 7200rpm HDD running CentOS operating system. The web environment included Nginx (0.6.39), Apache (2.2.3), PHP (5.2.12), ZendServer CE and MySQL.

То есть, выполняя этот тест на новых xeon или i7. Вы получаете оценку немного выше или в два раза выше, как например здесь

А не пора ли тогда выкинуть все новые CPU и закупить волшебный Intel® Core™2 Duo CPU E4500 2.20GHz?

Андрей
На сайте с 30.09.2009
Offline
482
#452
iHead:
Я лично видел несколько криво настроенных серверов с sendmail, где вызов этой функции может занимать десятки секунд. Допускаю, что проблема может быть также под виндами, где эта функция обычно делает коннект к SMTP-серверу (проблема доступности сервера). Письма в Битриксе отправляются "агентом", который по дефолту срабатывает на хитах к сайту.
Так что этот тест вполне годный для выявления явных проблем с работой почты.

Вы несомненно правы. Но сравнивать разные почтовики и говорить вот тут 2 секунды и это ужасно плохо, а тут 1 секунда и это супер, это очень глупо.

EuroHoster.org ( https://eurohoster.org/ru/ ) - территория быстрых серверов. Выделенные серверы, VPS, SSL, домены и VPN.
P
На сайте с 16.03.2009
Offline
144
#453
WapGraf:
Вы несомненно правы. Но сравнивать разные почтовики и говорить вот тут 2 секунды и это ужасно плохо, а тут 1 секунда и это супер, это очень глупо.

Там не секунды. Все эти тесты выполняются за миллисекунды.

Андрей
На сайте с 30.09.2009
Offline
482
#454

poiuty, ну неудачный пример. Просто все знают что sendmail более медленный. Но когда этот временной интервал не такой как написал iHead, смысла бросаться такими громкими словами ТС'у нельзя.

P
На сайте с 16.03.2009
Offline
144
#455

php mail(), 61ms

и не важно, будет ли это exim4 или sendmail.

ENELIS
На сайте с 29.08.2008
Offline
194
#456
WapGraf:
Вы несомненно правы. Но сравнивать разные почтовики и говорить вот тут 2 секунды и это ужасно плохо, а тут 1 секунда и это супер, это очень глупо.

Глупо, тест глуп, т.к. может у хостера отправка стоит не срочная, а в очередь, что значит что письмо уйдет в течение 5 или даже 30 минут (default exim), а PHP выдаст результат в миллисекунду.

С Уважением, ServerAstra.ru (https://serverastra.com) - VPS и выделенные сервера в Будапеште по выгодным ценам!
Андрей
На сайте с 30.09.2009
Offline
482
#457

Да в топку этот тест php-mail. Включение/отключение greylisting, разные спам-листы и т.д., - все это выдает совершенно разные результаты.

bitrix - no comment.

P
На сайте с 16.03.2009
Offline
144
#458
WapGraf:
Да в топку этот тест php-mail. Включение/отключение greylisting, разные спам-листы и т.д., - все это выдает совершенно разные результаты.

bitrix - no comment.

Нет же. Тест идет именно функции php mail(). И не важно, есть там greylist или "разные спам листы и т.д." => это не будет сказываться на результатах.


$s1 = getmicrotime();
bxmail($addr, $subj, $body);
$e1 = getmicrotime();
$t1 = $e1 - $s1;

return $t1;

bxmail это функция, которая вызывает кастомный класс PHPmailer. Если его нет -> вызывает обычный mail().

Тест не показывает реально когда уйдет письмо. Тест показывает скорость вызова и выполнение mail() или класса PHPmailer.

Далее письмо попадает в очередь exim4 или sendmail. А smtp когда захочет, тогда и отправит.

Андрей
На сайте с 30.09.2009
Offline
482
#459

poiuty, я код не изучал. Но проводил тесты, и с sendmail скорость всегда выше. Тестировал специально на одной вдс.

Какая то несостыковка с вашими словами получается.

P
На сайте с 16.03.2009
Offline
144
#460
WapGraf:
poiuty, я код не изучал. Но проводил тесты, и с sendmail скорость всегда выше. Тестировал специально на одной вдс.

Какая то несостыковка с вашими словами получается.

Как проверяли?

---------- Добавлено 07.11.2013 в 17:22 ----------

Из исходников php mail() /ext/standart/mail.c

Определяется пусть к SMTP (/usr/sbin/sendmail)

sendmail_cmd = sendmail_path;

Далее php делает popen к

#ifdef PHP_WIN32
sendmail = popen_ex(sendmail_cmd, "wb", NULL, NULL TSRMLS_CC);
#else
/* Since popen() doesn't indicate if the internal fork() doesn't work
* (e.g. the shell can't be executed) we explicitly set it to 0 to be
* sure we don't catch any older errno value. */
errno = 0;
sendmail = popen(sendmail_cmd, "w");
#endif
if (extra_cmd != NULL) {
efree (sendmail_cmd);
}

Далее в popen записывает и закрывает => pclose

		fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
if (hdr != NULL) {
fprintf(sendmail, "%s\n", hdr);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);

Далее письмо попадает в очередь и уже SMTP отправляет его. То есть вы хотите сказать, что popen -> sendmail выполнится быстрее чем popen -> exim4? =)



---------- Добавлено 07.11.2013 в 17:24 ----------

Аналогично тест битрикса -> проверяет "скорость сессий". Это из той же серии, что с mail().

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий