Команда Curl Отправить асинхронный запрос

Я использую этот запрос curl для отправки данных в API:

curl --location --request POST 'MY_IP' \
--header 'Content-Type: text/plain' \
--data-raw ' [{
    "event_id": "123",
}]    
'

Я хочу проверить производительность API, отправив запрос асинхронно, и измерить время, которое я пытался использовать xargs -P 10, которые говорят, что отправляют 10 запросов параллельно, но не могут этого сделать? Любая помощь и как я могу измерить время?

Мой код:

#!/bin/bash

Body='{
    "event_id": "12",
    "metric_name": "API",
    "value" : "1",
    "dimensions": {  
    },
    "timestamp_ms": 1615552313
}';

seq 1 2 | xargs -n1 -P10 curl --location --request POST '10.33.137.98:8080' --header 'Content-Type: text/plain' --data-raw "$Body"

Но как рассчитать время, такое как P95, P90 и т. д.?

0
задан 18 November 2021 в 18:47
1 ответ

Я также не мог заставить xargs -Pработать, когда мне нужно было сделать что-то подобное, и в итоге я использовал &.

Изman bash:

Если команда завершается управляющим оператором &, оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка не ожидает завершения команды, и статус возврата равен 0. Такие команды называются асинхронными.

Может быть, что-то вроде этого?

#!/bin/bash

Body='{
    "event_id": "12",
    "metric_name": "API",
    "value" : "1",
    "dimensions": {  
    },
    "timestamp_ms": 1615552313
}';

function run() {
    for i in $(seq 1 10); do
        echo "running task $i"
        curl --location --request POST '10.33.137.98:8080' --header 'Content-Type: text/plain' --data-raw "$Body" &
    done 

    wait
}

time run

Объяснение:

  • timeиспользуется для измерения общего времени выполнения, см.man time
  • waitгарантирует, что все фоновые задания завершатся перед продолжением, в противном случае timeпросто измеряет, сколько времени требуется для запуска всех запросов, а не сколько времени требуется для их выполнения. получить ответ
  • parallelтакже может работать вместо&

Для расчета статистики вы можете вывести время каждого запроса, используя второй вызов timeв цикле for, а затем обработать его, используя ваш любимые инструменты анализа.

1
ответ дан 26 November 2021 в 20:27

Теги

Похожие вопросы