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?
ulimit
akan menunjukkan beberapa batasan tersebut.parallel(1)
untuk tugas-tugas seperti: manpages.debian.org/cgi-bin/…start=$SECONDS
danend=$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 (danstart
hanya dihitung sekali). Di Bash, Anda dapat(( diff = end - start ))
menjatuhkan tanda dolar dan membiarkan jarak menjadi lebih fleksibel. Gunakanpgrep
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 setiapparallel
skrip perl memakan 32Mb.Jawaban:
Mengikuti pertanyaan ketat:
Lebih pendek jika Anda tidak memerlukan teks pelat di sekitar timing:
Jika Anda ingin menjalankan 1000s secara paralel, Anda akan mencapai beberapa batasan (seperti pegangan file). Meningkatkan ulimit -n atau /etc/security/limits.conf dapat membantu.
sumber
seq 100 | parallel 'echo here is command 1: {}; echo here is command 2: {}'
. Habiskan satu jam berjalan melalui tutorial. Baris perintah Anda akan mencintaimu karenanya:man parallel_tutorial
Hanya ada 65.536 port. Tutup ini.
(sunting: (sunting: lepaskan pernyataan yang sangat tanggal tentang batas OS dan tambahkan yang hilang )
echo
curl
wait
sumber