คุณจะเพิ่มจำนวนการเชื่อมต่อพร้อมกันสูงสุดใน Apache ได้อย่างไร?


103

ฉันต้องเปลี่ยนการตั้งค่า httpd conf ใดบ้างเพื่อเพิ่มจำนวนการเชื่อมต่อพร้อมกันสูงสุดสำหรับ Apache หมายเหตุ: ฉันปิด KeepAlive เนื่องจากส่วนใหญ่เป็นเซิร์ฟเวอร์ API

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
## 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

คำตอบ:


171

นี่คือคำอธิบายโดยละเอียดเกี่ยวกับการคำนวณ MaxClients และ MaxRequestsPerChild

http://web.archive.org/web/20160415001028/http://www.genericarticles.com/mediawiki/index.php?title=How_to_optimize_apache_web_server_for_maximum_concurrent_connections_or_increase_max_clients_in_apache

ServerLimit 16
StartServers 2
MaxClients 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

ก่อนอื่นเมื่อใดก็ตามที่ apache เริ่มทำงานจะเริ่มกระบวนการย่อย 2 กระบวนการซึ่งกำหนดโดยStartServersพารามิเตอร์ จากนั้นแต่ละกระบวนการจะเริ่มต้น 25 เธรดที่กำหนดโดยThreadsPerChildพารามิเตอร์ดังนั้น 2 กระบวนการสามารถให้บริการการเชื่อมต่อ / ไคลเอนต์พร้อมกัน 50 รายการเท่านั้นเช่น 25x2 = 50 ตอนนี้หากมีผู้ใช้งานพร้อมกันมากขึ้นกระบวนการย่อยอื่นจะเริ่มขึ้นซึ่งสามารถให้บริการผู้ใช้อีก 25 คนได้ แต่ServerLimitพารามิเตอร์สามารถเริ่มต้นได้กี่โปรเซสซึ่งหมายความว่าในคอนฟิกูเรชันด้านบนฉันสามารถมีโปรเซสลูกได้ทั้งหมด 16 โปรเซสโดยที่โปรเซสลูกแต่ละโปรเซสสามารถจัดการเธรด 25 เธรดในการจัดการทั้งหมด 16x25 = 400 ผู้ใช้พร้อมกัน แต่ถ้าจำนวนที่กำหนดไว้MaxClientsน้อยกว่าซึ่งเท่ากับ 200 ในที่นี้หมายความว่าหลังจาก 8 กระบวนการย่อยแล้วจะไม่มีกระบวนการเพิ่มเติมใด ๆ เกิดขึ้นเนื่องจากเราได้กำหนดขีด จำกัด บนของMaxClients. นอกจากนี้ยังหมายความว่าหากฉันตั้งค่าMaxClientsเป็น 1,000 หลังจาก 16 กระบวนการย่อยและ 400 การเชื่อมต่อจะไม่มีการเริ่มกระบวนการเพิ่มเติมและเราไม่สามารถให้บริการไคลเอ็นต์พร้อมกันมากกว่า 400 เครื่องได้แม้ว่าเราจะเพิ่มMaxClientพารามิเตอร์แล้วก็ตาม ในกรณีนี้เราจำเป็นต้องเพิ่มServerLimitเป็น 1,000/25 ด้วยเช่นกันMaxClients/ThreadsPerChild=40 ดังนั้นนี่คือการกำหนดค่าที่เหมาะสมสำหรับเซิร์ฟเวอร์ 1,000 ไคลเอนต์

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

24
ดูเหมือนจะมีการเปลี่ยนแปลงบางอย่างหลังจากเวอร์ชัน 2.3.13 ตัวอย่างเช่น MaxClients ตอนนี้ MaxRequestWorkers
ılǝ

2
โปรดแนะนำ: เว็บไซต์ที่เชื่อมโยงกำลังให้บริการมัลแวร์ (และสื่อลามก) ... มันอาจถูกแฮ็ก ... ค่อนข้างน่ากังวลหากคุณกำลังทำงานค้นหาวิธีแก้ปัญหาบน stackoverflow และเว็บไซต์ลามกที่เต็มไปด้วยระเบิดจะเปิดขึ้น ... sitecheck.sucuri net / results / www.genericarticles.com
yoano

1
โอเค แต่อะไรคือหน่วยความจำที่จำเป็นและข้อกำหนดของ CPU สำหรับการกำหนดค่าที่เหมาะสมที่สุดนี้ หรือฉันจะพิจารณา CPU และหน่วยความจำสำหรับการปรับแต่งนี้ได้อย่างไร
indianwebdevil

ฉันใช้การกำหนดค่านี้และยังคงถึงการเชื่อมต่อปัจจุบัน ... ดูเหมือนจะเป็นข้อ จำกัด อย่างหนักที่อื่น
Jorge Cornejo Bellido

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