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 topperintah dan mereka jauh dari batas.
Saya menggunakan ps aux | grep curl | wc -luntuk 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=$SECONDSdan 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 starthanya dihitung sekali). Di Bash, Anda dapat (( diff = end - start ))menjatuhkan tanda dolar dan membiarkan jarak menjadi lebih fleksibel. Gunakan pgrepjika Anda memilikinya.
awk).
paralleldan 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.
ulimitakan menunjukkan beberapa batasan tersebut.