ความอดทนต่อความเครียดของไลบรารี OpenSSL

เพื่อนร่วมงานของฉันและฉันมีความรู้สึกที่ดีว่า OpenSSL ต้องการการเสนอจากแอปพลิเคชันของเราไม่มากก็น้อย แต่ฉันต้องการความคิดเห็นว่ามันแย่ขนาดนี้จริงๆ หรือมีปัญหาในการใช้งานไลบรารีนี้ที่อาจสร้างปัญหาให้เราหรือไม่

การตั้งค่า: แอปพลิเคชัน C++ แบบมัลติเธรดที่รักษาการเชื่อมต่อ SSL แบบถาวรสำหรับผู้ใช้แต่ละราย

มีผู้ใช้ 500 คน มันทำงานได้ดี ฉันกำลังพยายามเพิ่มขีดจำกัดเป็น 1,000 และประมาณ 960 มี segfault ใน SSL_read การอ่านนี้เป็นการดำเนินการ I/O ครั้งแรกสำหรับการเชื่อมต่อเฉพาะนี้ ฉันต้องเพิ่มขีดจำกัดไฟล์ใน ulimit จาก 1024 เป็น 4096 เพื่อให้สูงขึ้นขนาดนี้ ดังนั้นคำถามของฉันคือ:

1) เป็นไปได้หรือไม่ที่ไลบรารีจำเป็นต้องได้รับการกำหนดค่าเพื่อให้ยอมรับการเชื่อมต่อจำนวนมากนี้

2) มันเป็นปัญหาเธรดที่อาจแก้ไขได้ด้วยการใช้ mutexes แบบเบาหรือไม่? ฉันไม่สามารถเปลี่ยน SSL_read ทั้งหมดให้เป็นแถบวิกฤตได้

3) แค่ห้องสมุดบั๊กกี้ที่ไม่ดีและจำเป็นต้องถูกโยนทิ้งไปใช่ไหม?


person djechlin    schedule 13.06.2012    source แหล่งที่มา
comment
OpenSSL ทำงานได้ดีในหลายแอปพลิเคชัน คุณใช้เวอร์ชันอะไรอยู่?   -  person Fred Foo    schedule 13.06.2012
comment
ดูเหมือนว่า OpenSSL 1.0.0-fips 29 Mar 2010   -  person djechlin    schedule 13.06.2012
comment
มัลติเธรดเกี่ยวข้องอย่างไร?   -  person Brady    schedule 13.06.2012
comment
openssl ถูกใช้ในแอปพลิเคชันจำนวนนับไม่ถ้วน ซึ่งหลายแอปพลิเคชันมีความต้องการที่สูงกว่าของคุณอย่างแน่นอน และดูเหมือนว่าจะทำงานได้อย่างเสถียรมาก แม้ว่าคุณจะพบข้อบกพร่อง (และฉันสงสัยว่าคุณพบข้อบกพร่อง) คุณต้องการใช้อะไรเป็นทางเลือกอื่น   -  person PlasmaHH    schedule 13.06.2012
comment
@Brady - หนึ่งเธรดต่อการเชื่อมต่อ ดังนั้นจึงสามารถเข้าถึงการอ่าน/เขียนพร้อมกันได้   -  person djechlin    schedule 13.06.2012
comment
@PlasmaHH - เพื่อนร่วมงานพบห้องสมุดอื่นซึ่งฉันไม่ตื่นเต้นที่จะนำไปใช้จนกว่าฉันจะรู้ว่าฉันใช้ openssl อย่างถูกต้อง ... ดังนั้นโพสต์ของฉันที่นี่   -  person djechlin    schedule 13.06.2012
comment
@djechlin: เพื่อตัดสินว่าคุณใช้ openssl อย่างถูกต้องหรือไม่ เราจำเป็นต้องรู้วิธีการใช้งานของคุณ กรณีทดสอบที่คอมไพล์ได้ในตัวจะเหมาะอย่างยิ่งสำหรับมัน   -  person PlasmaHH    schedule 13.06.2012
comment
เราจะเห็นการติดตามสแต็ก segfault ได้ไหม   -  person Brady    schedule 13.06.2012
comment
ฉันมีเพียงการติดตามสแต็กลงไปที่ openssl.so ฉันสามารถลองรวบรวมไลบรารีด้วย -g ตั้งแต่เริ่มต้นเพื่อดูว่าเกิดอะไรขึ้นภายในนั้น สำหรับโค้ดตัวอย่างเล็กๆ ฉันไม่แน่ใจว่าจะสร้างมันได้ง่ายแค่ไหน มันเป็น segfault ที่เกิดขึ้นเมื่อฉันมีสิ่งต่าง ๆ มากมายที่บินผ่านการเชื่อมต่อ - มันทำงานได้อย่างสมบูรณ์แบบ @ 500 ผู้ใช้และล้มเหลวที่ @ 1,000   -  person djechlin    schedule 13.06.2012
comment
คุณได้อ่านหน้าเอกสาร OpenSSL เกี่ยวกับเธรดแล้ว และคุณได้ให้ OpenSSL พร้อมการเรียกกลับไปยังฟังก์ชันการล็อคของคุณหรือไม่? openssl.org/docs/crypto/threads.html   -  person indiv    schedule 13.06.2012
comment
@indiv - ใช่ ฉันเพิ่งตรวจสอบโค้ดที่ฉันทำ และมันก็ดูสมบูรณ์แบบ   -  person djechlin    schedule 13.06.2012
comment
OpenSSL จัดส่งโดยเป็นส่วนหนึ่งของเซิร์ฟเวอร์ Apache HTTP, OpenLDAP และแพ็คเกจซอฟต์แวร์มาตรฐานอื่นๆ อีกมากมาย เป็นหนึ่งในไลบรารี SSL ที่ใช้กันอย่างแพร่หลายมากที่สุดในโลก ฉันขอแนะนำให้คุณมีปัญหาในท้องถิ่นมากขึ้น ;-)   -  person user207421    schedule 14.06.2012


คำตอบ (1)


จากความคิดเห็นของคุณ 1 เธรดต่อการเชื่อมต่อดูเหมือนจะไม่ใช่การใช้เธรดที่มีประสิทธิภาพ

ฉันอยากจะแนะนำเธรดพูลและใช้เธรดผู้ปฏิบัติงานเพื่อจัดการแพ็กเก็ตที่ได้รับ แพ็กเก็ตที่ได้รับสามารถจัดคิวไว้ในคิวและเธรดของผู้ปฏิบัติงานจะประมวลผลแพ็กเก็ตจากคิว การเชื่อมต่อ openSsl สามารถจัดเก็บไว้ในคอนเทนเนอร์ที่ใช้ร่วมกันกับเธรดทั้งหมดได้ จะต้องดำเนินการดูแลแพ็คเก็ตตามลำดับ ใช่แล้ว จำเป็นต้องมีการซิงโครไนซ์ (mutex)

person Brady    schedule 13.06.2012
comment
เรามาดูกันว่าเป็นไปได้หรือไม่ในแอปพลิเคชันของฉัน - stackoverflow.com/questions/11018776/ - person djechlin; 13.06.2012