Хотя, по сегодняшним меркам, характеристики сервера не впечатляют, я одновременно запускал довольно сложные вещи на аналогичном оборудовании. Однако я использовал очень скелеты, запускаю только то, что необходимо для настройки FreeBSD. (Подобно тому, что вы можете достичь с помощью ArchLinux). Я подозреваю, что вы не сделали много пользовательских настроек и приняли значения по умолчанию Ubuntu, которые могут быть слишком тяжелыми для этих спецификаций.
В настоящее время я играю с Linode 360, и производительность в порядке.
Теперь все это означает очевидное: нам нужна ваша информация, которой вы не поделились с нами. Конфигурация веб-сервера, объем памяти скрипта + интерпретатора, количество открытых файлов и т. Д. Или попробуйте предоставить наименьший скрипт, который по-прежнему выявляет проблему, или предоставьте больше информации.
Обновление: Теперь, когда я вижу, что вы используете mod_perl
: 1) Убедитесь, что все библиотеки, необходимые для скрипта, были предварительно загружены при запуске сервера? 2) Получаете ли вы какие-либо variable won't stay shared
сообщения в журнале? 3) Вы читали mod_perl Performance ? ( Глава 10: Совместное использование памяти может быть особенно актуально).
Как правило, вы должны предварительно загружать общие библиотеки при запуске сервера Apache. Как очень простое практическое правило, чем больше материалов остается общим, тем больше вы можете получить от своего сервера. См. Файл запуска в Практический mod_perl .
Плюс, я думаю, что 35 МБ на сервер - это немного. Я думаю, что вы могли бы сократить это, если вы удалили ненужные модули из конфигурации Apache. Однако, даже если вы не можете, скажем, использовать все 35 МБ, плюс максимальный дочерний процесс составляет 50 МБ, вы сможете одновременно обслуживать около 20 клиентов.
Я только что заметил скрипт, который вы тестируете. Действительно, попробуйте предварительно загрузить CGI
при запуске сервера, добавив следующие строки в ваш startup.pl
:
use strict;
use warnings;
use CGI();
Во-вторых, измените этот скрипт на
#!/usr/bin/perl
use strict;
use warnings;
use CGI ();
$| = 1;
handle_request();
sub handle_request {
my $cgi = CGI->new;
my $content = "5 second delay...\n";
print $cgi->header('text/plain'), $content;
sleep(5);
}
Обратите внимание, что вы никогда не отправляли заголовок в исходном скрипте (я также ненавижу вызывать CGI
экземпляр $query
, поэтому я позволил себе также изменить его). Смотрите также Ссылка на Perl .
Сообщите об использовании памяти после этого.
Наконец, почему ты спишь 5 секунд? AFAIK, время ожидания Apache для скрипта по умолчанию составляет 3 секунды.