Apache의 최대 동시 연결 수를 늘리려면 어떤 httpd conf 설정을 변경해야합니까? 참고 : 주로 API 서버이기 때문에 KeepAlive를 사용 중지했습니다.
#
# 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>
답변
MaxClients 및 MaxRequestsPerChild 계산에 대한 자세한 설명은 다음과 같습니다.
ServerLimit 16
StartServers 2
MaxClients 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
우선 아파치가 시작될 때마다 StartServers
매개 변수에 의해 결정되는 2 개의 자식 프로세스를 시작 합니다. 그런 다음 각 프로세스는 ThreadsPerChild
매개 변수에 의해 결정된 25 개의 스레드를 시작 하므로 2 개의 프로세스가 50 개의 동시 연결 / 클라이언트 (예 : 25×2 = 50) 만 서비스 할 수 있습니다. 이제 더 많은 동시 사용자가 오면 다른 하위 프로세스가 시작되어 다른 25 명의 사용자에게 서비스를 제공 할 수 있습니다. 그러나 시작될 수있는 자식 프로세스의 수는 ServerLimit
매개 변수에 의해 제어됩니다. 즉, 위 구성에서 총 16 개의 자식 프로세스를 가질 수 있으며 각 자식 프로세스는 25 개의 스레드를 처리 할 수 있으며 총 16×25 = 400 명의 동시 사용자를 처리 할 수 있습니다. 그러나에 정의 된 수가 MaxClients
200 개 미만이면 하위 프로세스 8 개 후에는 상위 캡을 정의했기 때문에 추가 프로세스가 시작되지 않습니다.MaxClients
. 이것은 또한 내가 MaxClients
1000으로 설정 하면 16 개의 하위 프로세스와 400 개의 연결 후에 추가 프로세스가 시작되지 않으며 MaxClient
매개 변수를 증가하더라도 400 개 이상의 동시 클라이언트를 서비스 할 수 없음을 의미합니다 . 이 경우에도 ServerLimit
1000/25로 늘려야합니다. 즉, MaxClients/ThreadsPerChild=40
이것은 서버 1000 클라이언트에 최적화 된 구성입니다.
<IfModule mpm_worker_module>
ServerLimit 40
StartServers 2
MaxClients 1000
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
답변
MaxClients 지시문을 변경하십시오. 이제 256에 있습니다.