ฉันจะกำหนดค่า Netty ให้จัดการปริมาณคำขอที่สูงได้อย่างไร

ในแอปพลิเคชันของเรา เราจำเป็นต้องสร้างเซิร์ฟเวอร์ HTTP โดยที่เมื่อเริ่มต้นระบบ การเชื่อมต่อ HTTP แบบถาวรประมาณ 1,600 รายการจะถูกเปิดโดยเซิร์ฟเวอร์ระยะไกลต่างๆ และคำขอ HTTP POST หลายพันรายการจะถูกส่งลงการเชื่อมต่อแต่ละครั้งอย่างรวดเร็วเป็นเวลาประมาณ 30 รายการ วินาที - เราใช้เวลาเพียงไม่กี่มิลลิวินาทีในการตอบสนองต่อแต่ละรายการ หลังจากผ่านไป 30 วินาที การเชื่อมต่อจะถูกปิด และอีกการเชื่อมต่อหนึ่งจะถูกเปิดขึ้น

เราเลือก Netty เพราะโดยบัญชีส่วนใหญ่แล้ว มันเหมาะสมอย่างยิ่งในการสร้างเซิร์ฟเวอร์ HTTP ที่มีประสิทธิภาพ

ในการใช้งานเซิร์ฟเวอร์ HTTP ของเรา เราได้ปฏิบัติตาม Snoop ตัวอย่างของเซิร์ฟเวอร์ Netty HTTP

ขออภัย เรากำลังประสบปัญหาที่ Netty อาจอธิบายได้ว่ามีการใช้งานมากเกินไป ดังนั้นเราจึงพิจารณาว่ามีการกำหนดค่าอย่างเหมาะสมหรือไม่ โดยเฉพาะอย่างยิ่งวิธีจัดการเธรด เรากำหนดค่าเซิร์ฟเวอร์ดังนี้:

ServerBootstrap bootstrap = new ServerBootstrap(
   new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool()));

เมื่อเราได้รับคำขอ เราจะจัดการมันภายในเธรดเดียวกันกับที่เรียก messageReceived() ใน SimpleChannelUpstreamHandler ของเรา

แนวทางนี้ควรใช้ได้กับแอปพลิเคชันของเราหรือไม่

แก้ไข: ค่าเฉลี่ยการโหลดบนกล่องในขณะที่เกิดความล้มเหลวคือ 0.05 ซึ่งต่ำมาก ฉันได้จัดสรร 4GB ให้กับกระบวนการ Java แล้ว แต่แทบจะไม่ได้ใช้งานอะไรเลย โดยพื้นฐานแล้ว กล่องมีภาระหนักเกินไปโดยสิ้นเชิง


person sanity    schedule 20.12.2012    source แหล่งที่มา
comment
คุณสามารถโพสต์ตัวเลขการใช้งาน CPU / ram บางส่วนได้หรือไม่?   -  person uldall    schedule 21.12.2012
comment
ตอบสนองตามคำขอของคุณ กล่องไม่ได้โอเวอร์โหลด   -  person sanity    schedule 21.12.2012
comment
เกิดข้อผิดพลาดอะไรบ้าง?   -  person Enno Shioji    schedule 21.12.2012
comment
บริการอื่นรายงานว่าไม่ได้รับการตอบกลับ HTTP ของเราหลังจากหมดเวลา 100 มิลลิวินาที แต่การบันทึกของเราแสดงให้เห็นว่าเรากำลังตอบสนองโดยมีเวลาเหลืออีกมาก   -  person sanity    schedule 22.12.2012
comment
ความคิดเห็นล่าสุดของคุณดูเหมือนจะชี้ไปที่ปัญหาด้านเครือข่ายใช่ไหม แบนด์วิธมีขนาดใหญ่เพียงพอหรือไม่? จริงๆ แล้วฉันกำลังทำงานกับแอปพลิเคชันที่คล้ายกัน และฉันประสบปัญหาประเภทเดียวกัน   -  person Pixou    schedule 23.12.2012
comment
แค่อยากรู้ว่าคุณกำลังพยายามสร้างเซิร์ฟเวอร์ rtb หรือไม่?   -  person Ole Gooner    schedule 02.12.2015


คำตอบ (1)


คุณได้ปิดการใช้งาน Nagle โดยการตั้งค่า "child.nodelay" ใน ServerBootstrap ของคุณหรือไม่?

(ดู http://static.netty.io/3.5/api/org/jboss/netty/bootstrap/ServerBootstrap.html)

person GamingBuck    schedule 28.12.2012