Intereting Posts
Как пересылать трафик между пространствами имен в Linux? Такая же проблема с загрузкой ftp при любом распространенном распространении как поменять ctrl и caplock с помощью xmodmap? Создание резервной копии базы данных cron (дамп) без раскрытия пароля в / etc / crontab Преобразование инструкции if-else в оператор switch Как отключить поиск гибких дисков при запуске linux? Как связать файл журнала с / dev / null и восстановить автоматически используемое пространство Преобразовать список десятичных значений в текстовом файле в шестнадцатеричный формат Могу ли я разрешить пользователям chmod файл, не принадлежащий им? Есть ли способ отслеживать шаблоны дисков i / o? (т.е. случайный или последовательный i / o?) «Текущее» окно терминала на команду shell / executable? Как определить, когда процесс или машина привязаны к IO? что означает «HardwareCorrupted», DirectMap4k, поля DirectMap2M в файле «/ proc / meminfo» Linux? telnet на localhost и loopback IP работает, но не LAN ip (Xen + Ubuntu) Аудио перестало работать в Xine в Debian

Как вызвать URL-адрес службы из сценария оболочки bash параллельно?

У меня есть служба, которую я вызываю из другого приложения. Ниже мой URL-адрес службы, который я вызываю –

http://www.betaservice.domain.host.com/web/hasChanged?ver=0 

Мне нужно выполнить некоторый нагрузочный тест на моем выше URL-адресе службы многопоточным способом, а не последовательно звонить один за другим.

Есть ли какой-либо путь из сценария оболочки bash, я могу загрузить нагрузку на мой вышеуказанный URL-адрес службы, вызвав его многопоточным способом? Я могу иметь 60-70 потоков, которые вызывают над URL-адресом параллельно, если это возможно, очень быстро?

Я бы не назвал его многопоточным как таковым, но вы могли бы просто запустить 70 заданий в фоновом режиме:

 for i in {1..70}; do wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null & done 

Это приведет к одновременному запуску 70 процессов wget . Вы также можете сделать что-то более сложное, как этот маленький скрипт:

 #!/usr/bin/env bash ## The time (in minutes) the script will run for. Change 10 ## to whatever you want. end=$(date -d "10 minutes" +%s); ## Run until the desired time has passed. while [ $(date +%s) -lt "$end" ]; do ## Launch a new wget process if there are ## less than 70 running. This assumes there ## are no other active wget processes. if [ $(pgrep -c wget) -lt 70 ]; then wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null & fi done 

Попробуйте ab, вы получите хорошую статистику:

 ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0 

Этот вызов будет выполнять 10000 запросов с параллелизмом 70 параллельных запросов.

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

тестирование

Я установил gnu-parallel из источника на моем компьютере, и я мог заставить его работать.

Вы можете установить его из источника здесь . У меня есть система redhat, поэтому я загрузил пакет fedora, а затем запустил .configure , make и make install чтобы make install parallel установку в моей системе.

Теперь, после успешной установки, я создал checking каталога и выполнил следующую команду.

 seq 10 | parallel -n0 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 

Как и ожидалось, приведенная выше команда загрузила мне 10 экземпляров веб-страницы. Вы можете установить число, которое вы хотите с помощью seq .

Для получения дополнительной информации о том, как запускать одну и ту же команду параллельно, вы можете проверить примеры, предоставленные gnu-parallel отсюда . На странице примера,

Если вы хотите запустить ту же команду с теми же аргументами, что и 10 раз параллельно, вы можете сделать:

seq 10 | parallel -n0 my_command my_args

РЕДАКТИРОВАТЬ

Теперь, чтобы воспользоваться parallel исполнением, вы можете использовать команду as,

  seq 70 | parallel -j70 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 

Параметр -j – это то, что может указывать общие задания, которые могут выполняться параллельно на основе общих ядер процессора.