Làm thế nào để gọi một URL dịch vụ từ tập lệnh bash shell song song?


8

Tôi có một dịch vụ mà tôi đang gọi từ một ứng dụng khác. Dưới đây là URL dịch vụ của tôi mà tôi đang gọi -

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

Tôi cần thực hiện một số thử nghiệm tải trên URL dịch vụ trên của mình theo cách đa luồng thay vì gọi liên tục từng cái một.

Có cách nào từ bash shell script không, tôi có thể tải một URL dịch vụ trên bằng cách gọi nó theo cách đa luồng không? Tôi có thể có 60-70 luồng gọi trên URL song song rất nhanh nếu có thể?

Câu trả lời:


13

Tôi sẽ không gọi nó là đa luồng như vậy nhưng bạn chỉ có thể khởi chạy 70 công việc trong nền:

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

Điều đó sẽ dẫn đến 70 wgetquá trình chạy cùng một lúc. Bạn cũng có thể làm một cái gì đó tinh vi hơn như kịch bản nhỏ này:

#!/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

Cảm ơn. Tôi đã nhận nó ngay bây giờ, vì vậy tôi chỉ có thể tăng 70 giá trị phải không? Điều này có thể tiếp tục thực hiện bài kiểm tra tải này trong 10 - 15 phút không?
David

@ user2809564 xem câu trả lời cập nhật.
terdon

chắc chắn, cảm ơn đã chỉnh sửa Khi tôi chạy trên kịch bản, tôi đã gặp lỗi như pgrep: invalid option -- 'c'. Tôi không chắc tại sao, bạn có thể nghĩ về những gì có thể là lý do?
david

@ user2809564 bạn có thể có một pgreptriển khai khác . Đây có phải là Linux không? Cái nào? Dù sao, bạn chỉ có thể thay đổi dòng đó thànhif [ $(pgrep wget | wc -l) -lt 70 ]; then
terdon

9

Hãy thử ab, bạn cũng có được một thống kê tốt đẹp:

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

Cuộc gọi này sẽ thực hiện 10000 yêu cầu với 70 truy vấn song song.


Làm thế nào tôi có thể cài đặt băng ghế apache trong Red Hat Enterprise Linux Server release 6.3?
david

1
yum install httpd-tools, theo serverfault.com/a/363775/10989
RJHunter

5

Bạn có thể thử cài đặt song song GNU. Bạn có thể lấy một số ví dụ song song GNU từ đây .

Kiểm tra

Tôi đã cài đặt gnu-paralleltừ nguồn trong máy của mình và tôi có thể làm cho nó hoạt động.

Bạn có thể cài đặt nó từ nguồn từ đây . Tôi có một hệ thống redhat và vì vậy tôi đã tải xuống gói fedora và sau đó chạy .configure, makemake installđể parallelcài đặt trong hệ thống của tôi.

Bây giờ, sau khi cài đặt thành công, tôi đã tạo một thư mục checkingvà chạy lệnh dưới đây.

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

Như mong đợi, lệnh trên đã tải xuống cho tôi 10 bản sao của trang web. Bạn có thể đặt số mà bạn muốn seq.

Để biết thêm thông tin về cách chạy song song cùng một lệnh, bạn có thể xác minh các ví dụ được cung cấp bởi gnu -allel từ đây . Từ trang ví dụ,

Nếu bạn muốn chạy cùng một lệnh với cùng một đối số 10 lần, bạn có thể thực hiện:

seq 10 | song song -n0 my_command my_args

BIÊN TẬP

Bây giờ, để tận dụng lợi thế của việc parallelthực thi, bạn có thể sử dụng lệnh như,

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

Các -jtùy chọn là cái gì đó có thể xác định tổng số công việc có thể được thực hiện song song dựa trên tổng số lõi CPU.


Cảm ơn Ramesh. Bao nhiêu lần nó sẽ gọi dịch vụ của tôi với phương pháp này?
david

@ user2809564, xem các bản cập nhật.
Ramesh

mát mẻ. Ngoài ra, điều này có thể tiếp tục thực hiện kiểm tra tải này trong 10 - 15 phút không?
david

Tôi nghĩ ví dụ này sẽ cung cấp nhiều thông tin chi tiết hơn. stackoverflow.com/a/7627103/1742825
Ramesh

@ user2809564, vui lòng tham khảo câu hỏi này cũng như nơi tôi có đề xuất sử dụng GNU parallel. unix.stackexchange.com/questions/114962/ Mạnh
Ramesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.