Saya menjalankan beberapa proses latar belakang ikal secara paralel dalam skrip bash berikut
START=$(date +%s)
for i in {1..100000}
do
curl -s "http://some_url_here/"$i > $i.txt&
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
done
Saya memiliki dedicated server 49Gb Corei7-920 (bukan virtual).
Saya melacak konsumsi memori dan CPU melalui top
perintah dan mereka jauh dari batas.
Saya menggunakan ps aux | grep curl | wc -l
untuk menghitung jumlah proses ikal saat ini . Jumlah ini meningkat dengan cepat hingga 2-4 ribu dan kemudian mulai terus menurun.
Jika saya menambahkan penguraian sederhana melalui perpipaan ikal ke awk ( curl | awk > output
) dari jumlah proses ikal menaikkan hanya 1-2 ribu dan kemudian menurun menjadi 20-30 ...
Mengapa jumlah proses menurun secara dramatis? Di mana batas arsitektur ini?
parallel(1)
untuk tugas-tugas seperti: manpages.debian.org/cgi-bin/…
start=$SECONDS
dan end=$SECONDS
- dan gunakan nama variabel case case campuran atau huruf kecil menurut kebiasaan untuk menghindari kemungkinan tabrakan nama dengan variabel shell. Namun, Anda benar-benar hanya mendapatkan interval waktu yang semakin meningkat dari awal setiap proses. Anda tidak akan mendapatkan waktu pengunduhan karena prosesnya di latar belakang (dan start
hanya dihitung sekali). Di Bash, Anda dapat (( diff = end - start ))
menjatuhkan tanda dolar dan membiarkan jarak menjadi lebih fleksibel. Gunakan pgrep
jika Anda memilikinya.
awk
).
parallel
dan mengatakan saya bahwa saya dapat menjalankan hanya 500 tugas paralel karena batas sistem menangani file. Saya menaikkan limit di Limit.conf, tetapi sekarang ketika saya mencoba menjalankan 5000 pekerjaan simulaneus, ia langsung memakan semua memori saya (49 Gb) bahkan sebelum memulai karena setiap parallel
skrip perl memakan 32Mb.
ulimit
akan menunjukkan beberapa batasan tersebut.