ฉันกำลังใช้งาน thounsand ของกระบวนการ background curlขนานในสคริปต์ทุบตีต่อไป
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
ฉันมีเซิร์ฟเวอร์เฉพาะ 49Gb Corei7-920 (ไม่ใช่เสมือน)
ฉันติดตามการใช้หน่วยความจำและ CPU ผ่านtop
คำสั่งและพวกเขาอยู่ไกลจากขอบเขต
ฉันกำลังใช้ps aux | grep curl | wc -l
เพื่อนับจำนวนกระบวนการcurlปัจจุบัน ตัวเลขนี้เพิ่มขึ้นอย่างรวดเร็วมากถึง 2-4 พันจากนั้นเริ่มลดลงอย่างต่อเนื่อง
หากฉันเพิ่มการแยกวิเคราะห์อย่างง่าย ๆ ผ่าน pipl curl ไปยัง awk ( curl | awk > output
) กว่ากระบวนการจำนวน curl เพิ่มขึ้นเป็น 1-2 พันจากนั้นลดลงเป็น 20-30 ...
ทำไมจำนวนกระบวนการลดลงอย่างมาก? ขอบเขตของสถาปัตยกรรมนี้อยู่ที่ไหน
parallel(1)
สำหรับงานดังกล่าว: manpages.debian.org/cgi-bin/…
start=$SECONDS
และend=$SECONDS
- และใช้ตัวพิมพ์เล็กหรือชื่อตัวแปรตัวพิมพ์เล็กโดยนิสัยเพื่อหลีกเลี่ยงการชนกันของชื่อที่อาจเกิดขึ้นกับตัวแปรเชลล์ อย่างไรก็ตามคุณจะได้รับช่วงเวลาที่เพิ่มมากขึ้นจากการเริ่มต้นของแต่ละกระบวนการเท่านั้น คุณไม่ได้รับระยะเวลาที่ดาวน์โหลดนานเนื่องจากกระบวนการอยู่ในพื้นหลัง (และstart
คำนวณเพียงครั้งเดียว) ใน Bash คุณสามารถ(( diff = end - start ))
ทิ้งเครื่องหมายดอลลาร์และอนุญาตให้ระยะห่างมีความยืดหยุ่นมากขึ้น ใช้pgrep
ถ้าคุณมีมัน
awk
)
parallel
และมันบอกว่าฉันอาจทำงานเพียง 500 ขนานเนื่องจากข้อ จำกัด ของระบบในการจัดการไฟล์ ฉันเพิ่มขีด จำกัด ใน limit.conf แต่ตอนนี้เมื่อฉันพยายามรัน 5,000 simulaneus งานมันกินหน่วยความจำทั้งหมดของฉันทันที (49 Gb) ก่อนที่จะเริ่มเพราะทุกparallel
สคริปต์ perl กิน 32Mb
ulimit
จะแสดงข้อ จำกัด บางอย่าง