Apache에서 최대 동시 연결 수를 어떻게 늘리나요?


102

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>

답변:


170

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

우선 아파치가 시작될 때마다 StartServers매개 변수에 의해 결정되는 2 개의 자식 프로세스를 시작 합니다. 그런 다음 각 프로세스는 ThreadsPerChild매개 변수에 의해 결정된 25 개의 스레드를 시작 하므로 2 개의 프로세스가 50 개의 동시 연결 / 클라이언트 (예 : 25x2 = 50) 만 서비스 할 수 있습니다. 이제 더 많은 동시 사용자가 오면 다른 하위 프로세스가 시작되어 다른 25 명의 사용자에게 서비스를 제공 할 수 있습니다. 그러나 시작될 수있는 자식 프로세스의 수는 ServerLimit매개 변수에 의해 제어됩니다. 즉, 위 구성에서 총 16 개의 자식 프로세스를 가질 수 있으며 각 자식 프로세스는 25 개의 스레드를 처리 할 수 ​​있으며 총 16x25 = 400 명의 동시 사용자를 처리 할 수 ​​있습니다. 그러나에 정의 된 수가 MaxClients200 개 미만이면 하위 프로세스 8 개 후에는 상위 캡을 정의했기 때문에 추가 프로세스가 시작되지 않습니다.MaxClients. 이것은 또한 내가 MaxClients1000으로 설정 하면 16 개의 하위 프로세스와 400 개의 연결 후에 추가 프로세스가 시작되지 않으며 MaxClient매개 변수를 증가하더라도 400 개 이상의 동시 클라이언트를 서비스 할 수 없음을 의미합니다 . 이 경우에도 ServerLimit1000/25로 늘려야합니다. 즉, MaxClients/ThreadsPerChild=40 이것은 서버 1000 클라이언트에 최적화 된 구성입니다.

<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ǝ 2014-01-02

2
조언하십시오 : 링크 된 사이트가 현재 악성 코드 (및 포르노)를 제공하고 있습니다 ... 아마도 해킹되었을 것입니다 ... 당신이 직장에서 stackoverflow에 대한 해결책을 찾고 있고 완전한 포르노 사이트가 열리면 상당히 성가신 일입니다
yoano

1
좋습니다. 그러나이 최적의 구성에 필요한 메모리와 CPU 요구 사항은 무엇입니까? 또는이 최적화를 위해 CPU 및 메모리를 어떻게 고려합니까?
indianwebdevil

이 구성을 적용했지만 여전히 현재 연결에 도달했습니다 ... 다른 곳에서 하드 제한처럼 보입니다
Jorge Cornejo Bellido

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.