การ จำกัด ปริมาณงานผ่านเครือข่ายของกระบวนการที่เปิดตัวไปแล้ว? (Linux / FreeBSD)


10

มียูทิลิตี้ใดบ้างที่จะ จำกัด ปริมาณงานผ่านเครือข่ายของกระบวนการหลังจากเปิดตัวแล้ว? ตัวอย่างง่ายๆ: คุณทราบว่าผู้ใช้ใช้แบนด์วิดท์การอัพโหลดทั้งหมดโดยใช้ scp และคุณต้องการ จำกัด อัตราหรือลดลำดับความสำคัญของการถ่ายโอน

ฉันเดาว่าฉันสามารถใช้การรวมกันของ iptables / tc หรือ pf เพื่อให้ได้ แต่ฉันสงสัยว่ามีเครื่องมือ "one-shot" หรือไม่ (เช่นหยดด้วยตัวเลือก - pid ^^)?


คุณหมายถึง "trickle" หรือเปล่า
halp

แก้ไข: ฉันถือว่า "หยด" มีวัตถุประสงค์
Steven วันจันทร์ที่

คำตอบ:


3

น่าเสียดายที่ไม่มีวิธีแก้ปัญหาสำหรับ FreeBSD มีโซลูชั่นมากมายเช่น dummynet / ipfw หรือ altq / pf ซึ่งใช้เพื่อ จำกัด การใช้เครือข่ายตามรูปแบบที่แตกต่างกัน แต่ไม่ใช่ใน pids

บน linux มีวิธี จำกัด การใช้เครือข่ายบนพื้นฐานของผู้ใช้:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

ฉันคิดว่าไม่มีวิธีแก้ไขการ จำกัด การใช้เครือข่ายตาม pid


2
ipfw ของ FreeBSD สามารถจับคู่การรับส่งข้อมูลโดย uid
gelraen

1

lsof กระบวนการรับพอร์ตเครือข่ายที่ proc ใช้ เมื่อคุณทราบว่ากำลังใช้พอร์ตใดคุณสามารถใช้กฎ IPTABLES เพื่อ จำกัด อัตราพอร์ตเหล่านี้ บทความเหล่านี้ควรทำให้คุณมีความคิดที่ดีขึ้น: http://linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http: // wikis sun.com/pages/viewpage.action?pageId=49906332


0

ใน Linux การรวมกันของ iptables และ tc อาจเป็นปัญหาที่ยากเนื่องจากตัวเลือก "--pid-owner" ถูกละทิ้งจากโมดูล "เจ้าของ" iptables (ดูหมายเหตุด้านล่างตารางที่นี่ ) ในความเป็นจริงดูเหมือนว่าการเชื่อมโยง (กระบวนการแพ็กเก็ต) เท่านั้นที่ซับซ้อนในขณะที่เราสามารถทำได้อย่างง่ายดายเช่นตัวกรองและ จำกัด แพ็คเก็ตอย่างมีประสิทธิภาพ


0

ฉันไม่คิดว่าจะมีวิธีแก้ปัญหาสำหรับเรื่องนี้ แต่การใช้เครื่องมือ Linux มาตรฐานคุณสามารถแฮกสคริปต์ที่จะทำสิ่งนั้น

ก่อนอื่นคุณสามารถรับรายการการเชื่อมต่อทั้งหมดของกระบวนการเฉพาะด้วย lsof จากนั้นคุณสามารถสร้างนโยบายการเข้ากับ tc สำหรับการเชื่อมต่อเหล่านั้น


0

ถ้าคุณทำดีให้ลงไปที่ +20 แล้วสิ่งอื่นใดที่ทำงานบนระบบจะได้รับความสำคัญและงานจะถูกกำหนดเวลาไว้น้อยลงดังนั้นจะพบว่ายากที่จะเติมบัฟเฟอร์หรือแพ็กเก็ตกระบวนการซึ่งจะนำไปสู่ ​​TCP บางอย่าง การอุด มันจะเป็นระยะ ๆ แต่อาจช่วยได้มากพอ

# renice 20 -p $pid

1
นี่เป็นวิธีที่ใช้กันอย่างแพร่หลายในการพยายามควบคุมแบนด์วิดท์และจะทำงานได้ก็ต่อเมื่อระบบมีการโหลดจำนวนมากมาก - บนระบบที่ไม่ทำงาน evan กระบวนการที่เปลี่ยนเป็น -20 จะยังคงได้รับ CPU บ่อยเท่าที่ต้องการ
voretaq7

ถูกต้อง แต่ถ้านี่ไม่ใช่แบนด์วิธที่ใช้ร่วมกับคอมพิวเตอร์เครื่องอื่น ๆ หากเครื่องไม่ได้ใช้งานคุณส่วนใหญ่ไม่สนใจว่ากระบวนการนี้จะรับแบนด์วิดธ์ทั้งหมดหรือไม่ เฉพาะเมื่อมีกระบวนการอื่นที่พยายามใช้แบนด์วิดท์ที่สำคัญ เราอาจมีคำจำกัดความที่แตกต่างกันของ "โหลดหนักมาก" - หากมีกระบวนการอื่นที่พยายามเรียกใช้มันจะได้รับการจัดลำดับความสำคัญและถ้าค่าเฉลี่ยการโหลดคือ> = 1 ต่อคอร์นี่อาจช่วยได้ ฉันทราบว่ามันหยาบ แต่ถ้ามันเป็นเครื่องมือที่มีให้ใช้เพียง (FreeBSD) อย่างน้อยก็คุ้มค่ากับการยิง
Phil P
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.