สิ่งที่ต้องทำหลังจากกดขีด จำกัด การเชื่อมต่อสูงสุด 256 ขีด จำกัด Apache


9

หลังจากเกาหัวของฉันพยายามคิดออกว่าทำไมเว็บไซต์ของฉันตอบสนองช้ามากแม้ว่าทรัพยากรเซิร์ฟเวอร์จะดีฉันก็ตรวจสอบสถานะ Apache และพบว่า:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

ดูเหมือนว่าอาปาเช่ของฉันจะเต็มไปด้วยการเชื่อมต่ออย่างแท้จริง ใครก็ตามที่พยายามเข้าชมเว็บไซต์ของฉันจะได้รับ "รายการรอ" จนกว่า Apache จะให้บริการฟรีอีกครั้ง

ดูเหมือนว่าฉันมีสองตัวเลือก

A) เพิ่มขีด จำกัด การเชื่อมต่อสูงสุดที่สูงกว่า 256 ถึงแม้ว่าตามบทความนี้มันไม่ง่ายเลย:

โดยค่าเริ่มต้นพารามิเตอร์ MaxClients มีการรวบรวมในขีด จำกัด ที่ยากของ 256 ซึ่งสามารถเปลี่ยนแปลงได้โดยการคอมไพล์ Apache ใหม่ การแจกแจงบางส่วนหรือ บริษัท โฮสติ้งเพิ่มขีด จำกัด นี้เป็นค่าที่สูงมากเช่น 512 หรือ 1024 เพื่อรองรับการโหลดจำนวนมาก

B) ค้นหาสคริปต์ที่ใช้เวลามากเกินไป ดูเหมือนว่าจะยุ่งยากสำหรับฉันมากขึ้นเนื่องจากกระบวนการ apache ส่วนใหญ่จะปรากฏขึ้นและหายไปอีกครั้ง นอกจากนี้สคริปต์ของเว็บไซต์ PHP ของฉันได้รับการปรับให้เหมาะสมเช่นกัน ... และอีกครั้งทรัพยากรของเซิร์ฟเวอร์นั้นใช้ได้:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

ฉันควรเลือกตัวเลือกใด (ถ้ามีตัวใดตัวหนึ่ง) และฉันควรทำอย่างไร

แก้ไข

ข้อมูลเพิ่มเติม: รุ่นเซิร์ฟเวอร์: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

HTTP Conf: http://pastebin.com/yBeLt6mP

ตัวอย่างคำขอ Parital: http://pastebin.com/vzUVDMPR

สลับการตัดข้อความถ้าการวางแปะแสดงว่าแปลก


บทความที่คุณอ้างถึงคือ ~ 6 ปี การเปลี่ยนแปลงซอฟต์แวร์ ดูคำตอบของเชน
Chris S

1
@ChrisS ยิ่งล้าสมัย - ขีด จำกัด ในการคอมไพล์เป็นสิ่งที่ 1.x (2.0 ออกมาในปี 2002) และบทความเชื่อมโยงไปยังเอกสาร 2.0 อย่างชัดเจน
เชน Madden

คำตอบ:


10

บทความนั้นไม่ถูกต้อง MaxClientsสามารถยกสูงกว่า 256 เมื่อใช้ prefork MPM (ซึ่งเป็นสิ่งที่ฉันคิดว่าคุณกำลังใช้ตามคำอธิบายของปัญหา) จากเอกสาร :

สำหรับเซิร์ฟเวอร์ที่ไม่ใช่เธรด (เช่น prefork) MaxClientsแปลเป็นจำนวนสูงสุดของกระบวนการลูกที่จะเปิดให้บริการตามคำขอ ค่าเริ่มต้นคือ 256; ServerLimitเพื่อเพิ่มความมันแล้วคุณยังต้องยก

ServerLimitเป็นสิ่งที่มีขีด จำกัด ที่รวบรวมได้ยาก แต่มันก็ผ่านพ้นไปได้โดยที่เซิร์ฟเวอร์ของคุณไม่สามารถใช้งานได้ เอกสาร :

มีข้อ จำกัด อย่างหนักในการServerLimit 20000รวบรวมลงในเซิร์ฟเวอร์ (สำหรับ prefork MPM 200000) สิ่งนี้มีวัตถุประสงค์เพื่อหลีกเลี่ยงผลกระทบที่น่ารังเกียจที่เกิดจากการพิมพ์ผิด

ดังนั้นหากคุณต้องการเพิ่มขีด จำกัด ลูกค้าของคุณเป็น 512 เช่นนั้น:

MaxClients 512
ServerLimit 512

คุณควรดูว่าคุณใช้ MPM ใดเนื่องจาก MPMs อื่นที่ไม่ใช่ prefork ดีกว่าสำหรับสเกล ดูที่นี่สำหรับข้อมูลเพิ่มเติม


ฉันเห็น core.c และ worker.c httpd -lจากการทำงาน ฉันเดาว่านั่นหมายถึงฉันกำลังใช้งาน MPM อยู่ใช่ไหม?
kmoney12

@hellohellosharp จริง - ในกรณีที่คุณจะต้องการปรับที่อาจเกิดขึ้นของคุณMaxClients, ServerLimit, และThreadsPerChild ThreadLimitคุณสามารถกำหนดค่าผู้ปฏิบัติงานปัจจุบันของคุณได้จากhttpd.confไหน
เชนหัวเสีย

ใช่ ... มีอันตรายในการโพสต์แบบสาธารณะหรือไม่ หวังว่าจะไม่นี่คือ: pastebin.com/yBeLt6mP
kmoney12

ไม่ไม่มีปัญหาในการโพสต์ไฟล์ httpd.conf ส่วนใหญ่ เพียงให้แน่ใจว่าคุณไม่ได้มีอะไรแปลก ๆ เช่นความคิดเห็นด้วยรหัสผ่าน / ชื่อผู้ใช้ / ฯลฯ บางครั้งสิ่งเหล่านี้จะเพิ่มขึ้นในส่วนการกำหนดค่าพร็อกซี หลายคนชอบที่จะแก้ไขชื่อ IP และโดเมนด้วยดังนั้นพวกเขาจึงไม่ดึงดูดความสนใจ
Chris S

1
โมดูลสถานะสามารถแสดงรายละเอียดเหล่านี้ให้คุณเห็น
ETL

-1

ฉันขอแนะนำให้คุณใช้ reverse proxy บางอย่างเช่น nginx หรือ lighttpd สามารถจัดการการเชื่อมต่อได้มากกว่า apache ขึ้นอยู่กับว่าไซต์ของคุณใช้ htaccess คุณยังสามารถใช้ nginx / lighttpd กับ fcgi และ forego apache ได้อย่างสมบูรณ์


4
จริงๆ?? เขาต้องการเพิ่มการกำหนดค่าสองบรรทัดhttpd.confและโซลูชันของคุณคือการทำลายซอฟท์แวร์ส่วนใหญ่ที่เขาใช้และแทนที่ด้วย! ซอฟต์แวร์ทุกชิ้นมีปัญหา แต่การใช้งานในทางที่ไม่ได้รับการศึกษาทำให้เกิดปัญหาแย่ลง
Chris S

ในที่สุด nginx สามารถจัดการการเชื่อมต่อที่ใช้งานได้มากขึ้นมันขึ้นอยู่กับ OP เพื่อตัดสินใจว่าจะใช้อะไรฉันแค่ยื่นข้อเสนอแนะของฉัน
Shoshomiga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.