# Apache przestaje odpowiadac - przekroczenie MaxClients

## mcbarlo

Zauwazylem, ze czasami moj Apache sie zawiesza. W logach jako ostatni mam taki wpis:

```
[Sun Jun 27 05:33:47 2010] [error] server is within MinSpareThreads of MaxClients, consider raising the MaxClients setting

[Sun Jun 27 05:34:46 2010] [error] server reached MaxClients setting, consider raising the MaxClients setting
```

Jak widzicie taka sytuacja ma miejsce zupelnie poza szczytem co mnie dziwi tymbardziej.

Apache jest skompilowany z flaga threads, wiec moj modul mpm wyglada tak:

```
<IfModule mpm_worker_module>

        StartServers            2

        MinSpareThreads         25

        MaxSpareThreads         75

        ThreadsPerChild         25

        ServerLimit             80

        MaxClients              2000

        MaxRequestsPerChild     10000

</IfModule>
```

Troche mi sie wierzyc nie chce, ze 2000 klientow bylo polaczonych z serwerem jeszcze o tej porze...

Kombinowalem juz z konfigami i nie moge nic konkretnego wymyslic. Moze skompilowac Apache z -threads i uzywa preforka? Moze to cos zmienic?

Tak mam skompilowanego Apache (nie wiem czy jest sens te wszystkie moduly pakowac):

```
[ebuild   R   ] www-servers/apache-2.2.15  USE="ssl threads -debug -doc -ldap (-selinux) -static -suexec" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_dbd authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif speling status unique_id userdir usertrack vhost_alias -asis -authn_alias -cern_meta -charset_lite -dumpio -log_forensic -proxy_ftp -substitute -version" APACHE2_MPMS="-event -itk -peruser -prefork -worker" 0 kB
```

Bede wdzieczny za wszystkie sugestie.

----------

## Core

Witaj, do pewnego czasu Apache (nie wiem jak Twój) były podatne na ataki typu slowloris, być może ktoś coś podobnego przeprowadza na Twoim serwerku. Ja na Twoim miejscu nie kompilowałbym Apache z wątkami, tylko zostawił starego, poczciwego i superstabilnego preforka a przed nim ustawiłbym jakieś reverse proxy.

Polecam haproxy, perbala lub SQUID'a. Nie do końca rozumiem, dlaczego rozwiązania tego typu dają tak wielki strzał wydajności, ale przykładowo jedna z często uczęszczanych domen tworzyła sobie ponad 100 wątków Apache, dawała mocno po loadzie serwera (bywało i koło 10-15) a przy tym tak samo jak u Ciebie, czasami się przytykała. Po zainstalowaniu perlbala mam 5 wątków Apache, bardzo niskie load a strona śmiga jak szalona. Jeżeli będziesz potrzebował adresów zewnętrznych w logach apache i w REMOTE_HOST to zainteresuj się modułem mod_rpaf  :Smile: 

----------

## mcbarlo

Poczytam o tym ataku, bo cos mi sie wydaje, ze to bedzie przyczyna.

Zawsze serwer osiaga MaxClients w godzinach kiedy jest najmniejszy ruch. W szczycie jest ok.

Mam jeszcze jedno pytanie. Dlaczego jesli serwer osiagnie MaxClients sie poprostu wiesza. Nie odpowiada na zadne zapytania, nic sie nie da zrobic. Tylko restart apache i potem smiga.

----------

## SlashBeast

 *mcbarlo wrote:*   

> e jedno pytanie. Dlaczego jesli serwer osiagnie MaxClients sie poprostu wiesza. Nie odpowiada na zadne zapytania, nic sie nie da zrobic. Tylko restart apache i potem smiga.

  Bo to apache. Generalnie jak ktos ma sobie apache bez reverse proxy to jest to po prostu jawna prowokacja.

Postaw na dobra, radziecka technologie, uzyj nginksa jako revproxy albo calkowicie przeniesc sie na niego z apache.

----------

## bartmarian

jak sądzę innym pomocnym rozwiązaniem może być:

```

iptables -A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 8 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable
```

lub DROP (z resztą nie tylko dla tej usługi...)

----------

## mcbarlo

No i dzis znow... 3:26 i Apache zdechl.

Czytalem jeszcze o mod_qos do Apache. Niestety dla amd64 jest jeszcze niestabilny, a nie chcialbym w serwerze takiego pakietu. No, ale jesli ktos z Was ma dobre doswiadczenia z nim zwiazane to czemu nie sprobowac?  :Smile: 

Co do rev proxy to jest zagwozdka na kilka wieczorow, a w tej chwili mam bardzo malo czasu. Mysle, ze skorzystam narazie z firewalla. bartmarian powiedz mi prosze czy limit do 8 nawiazanych polaczen dobrales jakos doswiadczalnie? Nie jest to za malo?

----------

## bartmarian

w zasadzie u siebie mam 6 a nie 8, musisz testować czy stronka się prawidłowo otwiera i tyle...

----------

