2016-03-01 4 views
9

Я запускаю некоторый код параллельно, используя модуль forking в perl под названием Parallel::ForkManager. Я в настоящее время установки максимального числа процессов 30:Сколько параллельных процессов?

my $pm = Parallel::ForkManager->new(30); 

Что было бы желательно максимальное количество процессов для создания? Я делаю это на коммерческом сервере Solaris, но я до сих пор не хочу перегружать систему.

+6

Как правило, разумно установить максимальное количество процессов на некоторый небольшой кратный от общего количества доступных процессоров (2x является общим выбором). Но это действительно зависит от вашего приложения, и вам определенно нужно протестировать различные настройки, чтобы увидеть, что лучше всего подходит для вас. –

+0

@WilliamPursell Ну, на сервере есть 1 физический процессор и 30 виртуальных процессоров. Кажется, я могу развить 30 процессов без проблем. – CJ7

+1

Сделайте заявление «Я, кажется, в состоянии ...» более точно. Определите ключевые показатели, которые важны для вас, затем измените параметр и посмотрите, как влияют эти показатели. –

ответ

5

В случае загрузки файлов, это действительно зависит от

  1. сколько различных хостов вы скачиваете с, и
  2. как быстро они дадут вам запрошенные файлы по сравнению с максимальной пропускной способностью.

Если вы загружаете файлы с одного компьютера на одну машину в локальной сети, 2-3 составляет около макс. Если вы загружаете файлы с 30 разных серверов в Интернете, все из которых медленны, но у вас есть толстая трубка, тогда 30 могут быть разумными.

Здесь нет единого универсального правильного ответа. Если вы не считаете «это зависит».

0

Вы должны установить максимальное количество процессов 60.

+2

Можете ли вы объяснить, почему? –

+4

@John Потому что медведи гризли. – ThisSuitIsBlackNot

4

упоминался Цель «загрузки файлов», но в комментариях некоторое время назад, и я беру этот вопрос, как говорится, чтобы быть более общим ,


Единственная актуальная мера заключается в том, что вы начинаете достигать насыщения в показателях производительности с помощью специального программного обеспечения в этой системе. Формальные ограничения огромны и бессмысленны, а эмпирические правила очень общие.

Давайте представим, что для запуска 10 процессов и времени выполнения задания 10 раз. Увеличьте до 20 процессов, а время уменьшится в 20 раз - но для 30 процессов коэффициент усиления будет множителем 10. В этот момент мы загрузили . Нажмите дальше, и производительность будет быстро снижаться и для всех. В этот момент сервер перегружен, хотя он позволяет, скажем, 1024 процесса на пользователя (и действительно десять или более раз для сервера).

С несколькими процессами на ядро ​​задействована машина, и я бы сказал, что это хорошее эмпирическое правило. Однако он слишком общий. Я сомневаюсь, что вы получите много результатов, перейдя к множеству процессов, учитывая многие другие факторы, которые влияют на него.

Доступ к одному веб-серверу   Возможности сервера - это Евангелие. Возможно, они опубликовали, сколько запросов в секунду они довольны. Или у них может быть ограничение на количество процессов на пользователя, скажем, 10 или 20. Если это означает, что многие одновременные загрузки - это ваш лимит. Но я был бы осторожен - если сайт близок и быстро, запрос может завершиться всего за 0,1 или 0,2 секунды. Затем, с 10 процессами, вы можете поражать сервер 100 раз в секунду. Я не рекомендую этого. Если нет информации, я бы сказал, что она будет содержать несколько запросов в секунду. Производительность и загрузка сервера также зависят от контента - большие загрузки отличаются от вытягивания многих тощих веб-страниц. Ввод-вывод на вашей стороне может иметь значение, но я ожидаю, что сервер установит лимит. Если вы собираетесь использовать их услугу, то почему бы не отправить электронное письмо и спросить, с чем все в порядке.

I/O, сеть (многие серверы) или диск   С сетью производительность зависит от каждой части оборудования как на пути, так и на программном обеспечении. Никто не может сказать, не опробовав его. Диск ввода/вывода очень сложный. Чтобы добавить к проблеме, неясно, будут ли ваши диски или сеть узким местом. Я ожидаю, что чистая производительность увеличится до нескольких десятков процессов и, вероятно, будет меньше.

процессора или памяти связаны   Это может быть простой - обработка, которая может быть разбита параллельно на 30 ядер могут пользоваться рядом с коэффициентом 30 ускорения (не дали никаких других узких мест). Выход за пределы ядра явно приводит к снижению производительности. Параллельная (но не параллельная) обработка намного сложнее. Если ваш код является интенсивным в памяти, который еще не совсем по-другому.

Полезные базовые инструменты для оценки вышеуказанных компонентов: iostat -xzn, netstat -I и vmstat. Но есть немного кривых, чтобы узнать, как интерпретировать их вывод, и, надеюсь, это не приходит к такому.


Вывод заключается в том, что вы должны его время. Примите ваше реальное приложение и время его работы в одном процессе. Сделайте это 3-5 раз и посмотрите на средний (выбросьте очевидные выбросы). Затем повторите с 5 процессами, затем с 10 и т. Д. Я ожидаю, что тенденция начнет замедляться намного раньше, чем 30 процессоров, о которых вы упоминаете. Как только это дойдет до того, что система загружена, и кто бы ни работал на ней, это заметит. Вскоре после этого производительность, скорее всего, быстро ухудшится. Правильные инструменты бенчмаркинга, такие как Benchmark, гораздо сложнее, но это вполне может решить проблему. Если вы видите странное или непоследовательное поведение, вам, возможно, придется вникать в детали, начиная с инструментов, упомянутых выше.

Что «перегружено» означает немного неясно. Мне нравится ограничивать использование ресурсов задолго до того, как пострадают другие люди. Но его можно будет нажать, в частности, если вы сможете бежать, когда тихо. Я сомневаюсь, что вы все равно получите достойную прибыль от количества доступных процессоров.

Таким образом, нет никакой озабоченности по поводу «перегрузки« сервер, если вы впервые делаете вещи. Предел производительности покажет вам, когда остановиться. Я бы сказал, что ваш предел 30 очень разумен. Если это действительно не касается загрузки файлов, в этом случае, вероятно, все это имеет значение для веб-сервера.

Смежные вопросы