Skocz do zawartości
jasiek07

[Linux] Optymalizacja apache2 (cache)

Polecane posty

Witam,

mam problemy z wydajnością serwera przy dużej ilości odwiedzających. Podejrzewam, że problem głównie leży po stronie konfiguracji apache2. Słyszałem, że najlepszym krokiem w kierunku optymalizacji serwera jest zwiększenie pamięci podręczeniej, jako że praktycznie cała zawartość mojej strony jest statyczna, to chciałbym zwiększyć cache aby zwiększyć wydajność. Ponieważ na obecną chwilę przy znacznym ruchu moja strona wysiada, zużycie ramu wynosi 100% aż w pewnym momencie wysiada baza danych i trzeba naprawiać tabele i resetować ciągle serwer.

CPU model : Intel(R) Xeon(R) CPU L5639 @ 2.13GHz
Number of cores : 2
CPU frequency : 2134.000 MHz
Total amount of ram : 2048 MB
Total amount of swap : 0 MB
System uptime : 1 day, 18:40,
Download speed from CacheFly: 30.7MB/s
Download speed from Coloat, Atlanta GA: 3.05MB/s
Download speed from Softlayer, Dallas, TX: 30.6MB/s
Download speed from Linode, Tokyo, JP: 11.1MB/s
Download speed from i3d.net, Rotterdam, NL: 7.13MB/s
Download speed from Leaseweb, Haarlem, NL: 19.6MB/s
Download speed from Softlayer, Singapore: 2.20MB/s
Download speed from Softlayer, Seattle, WA: 36.6MB/s
Download speed from Softlayer, San Jose, CA: 57.8MB/s
Download speed from Softlayer, Washington, DC: 18.9MB/s
I/O speed : 110 MB/s
apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Mój config w załączniku (musiałem zmienić rozszerzenie na *txt ponieważ inne nie chciało się wgrać).

 

apache2.txt

 

 

Mógłby ktoś pomóc w ustawieniu tego cache? Szukałem troche po googlach ale niezbyt klarownie to było wytłumaczone..

 

Pozdrawiam!

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wkleiłeś główny config apache z którego nic nie wynika. Zapewne masz apache + mod_php

 

Pokaż wynik poleceń:

 

free -m

 

i listę procesów

 

ps -aux

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
 total       used       free     shared    buffers     cached
Mem:          2048        781       1266          0          0        497
-/+ buffers/cache:        284       1763
Swap:            0          0          0
root@jasiek:~#

 

 ps -aux
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   8360   128 ?        Ss   May17   0:00 init [2]
root         2  0.0  0.0      0     0 ?        S    May17   0:00 [kthreadd/201]
root         3  0.0  0.0      0     0 ?        S    May17   0:00 [khelper/201]
root       460  0.0  0.0   5988   484 ?        Ss   May17   0:00 /sbin/syslogd
root       481  0.0  0.0  54568   212 ?        Ss   May17   0:00 /usr/sbin/saslauthd -a pam -c -m /var/run/saslauthd -n 2
root       482  0.0  0.0  54568   188 ?        S    May17   0:00 /usr/sbin/saslauthd -a pam -c -m /var/run/saslauthd -n 2
root       498  0.0  0.2 204876  5336 ?        Ss   May17   0:09 /usr/sbin/apache2 -k start
root       531  0.0  0.0  49180   764 ?        Ss   May17   0:00 /usr/sbin/sshd
109        547  0.0  0.0  23272   804 ?        Ss   May17   0:00 /usr/bin/dbus-daemon --system
root       584  0.0  0.0  19340   416 ?        Ss   May17   0:00 /usr/sbin/xinetd -pidfile /var/run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6
root       611  0.0  0.0   9196   488 ?        S    May17   0:00 /bin/sh /usr/bin/mysqld_safe
root       612  0.0  0.0  20912   384 ?        Ss   May17   0:00 /usr/sbin/cron
root       841  0.0  0.0  39056   712 ?        Ss   May17   0:01 /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf
root       844  0.0  0.0  75032  1320 ?        S    May17   0:00 dovecot-auth
root       863  0.0  0.0  75112  2004 ?        S    May17   0:00 dovecot-auth -w
root       917  0.0  0.0  37180   680 ?        Ss   May17   0:00 /usr/lib/postfix/master
postfix    924  0.0  0.0  39408  1152 ?        S    May17   0:00 qmgr -l -t fifo -u
postfix   2484  0.0  0.0  41764  1504 ?        S    May17   0:00 tlsmgr -l -t unix -u -c
mysql    15774  1.1  2.4 344216 51140 ?        Sl   May17  12:15 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var
root     15775  0.0  0.0   3860   420 ?        S    May17   0:00 logger -t mysqld -p daemon.error
dovecot  26327  0.0  0.1  36928  2568 ?        S    05:07   0:00 imap-login
dovecot  26593  0.0  0.1  36916  2572 ?        S    05:26   0:00 pop3-login
dovecot  26594  0.0  0.1  36916  2568 ?        S    05:26   0:00 pop3-login
dovecot  26597  0.0  0.1  36916  2572 ?        S    05:26   0:00 pop3-login
postfix  28512  0.0  0.1  39244  2376 ?        S    08:20   0:00 pickup -l -t fifo -u -c
dovecot  28998  0.0  0.1  36928  2568 ?        S    08:57   0:00 imap-login
support  28999  0.0  0.1  40088  2172 ?        S    08:57   0:00 imap
dovecot  29013  0.0  0.1  36928  2572 ?        S    08:58   0:00 imap-login
www-data 29229  1.2  1.1 218364 23368 ?        S    09:14   0:01 /usr/sbin/apache2 -k start
www-data 29232  0.3  1.3 224492 29148 ?        S    09:14   0:00 /usr/sbin/apache2 -k start
www-data 29238  1.9  1.1 219384 24244 ?        S    09:15   0:01 /usr/sbin/apache2 -k start
www-data 29239  0.7  1.1 221456 24972 ?        S    09:15   0:00 /usr/sbin/apache2 -k start
www-data 29240  0.0  0.3 205376  7592 ?        S    09:15   0:00 /usr/sbin/apache2 -k start
www-data 29241  1.6  1.1 219384 24200 ?        S    09:15   0:01 /usr/sbin/apache2 -k start
www-data 29245  1.2  1.1 219648 24208 ?        S    09:15   0:00 /usr/sbin/apache2 -k start
www-data 29249  1.8  1.1 219384 24184 ?        S    09:15   0:01 /usr/sbin/apache2 -k start
www-data 29251  2.3  1.3 223188 28068 ?        S    09:15   0:01 /usr/sbin/apache2 -k start
root     29252  0.0  0.1  79016  3644 ?        Ss   09:16   0:00 sshd: root@pts/0
root     29254  0.0  0.0  17724  1924 pts/0    Ss   09:16   0:00 -bash
www-data 29259  1.3  1.1 218384 23196 ?        S    09:16   0:00 /usr/sbin/apache2 -k start
www-data 29262  0.0  0.2 204876  5744 ?        S    09:17   0:00 /usr/sbin/apache2 -k start
root     29263  0.0  0.0  14824  1072 pts/0    R+   09:17   0:00 ps -aux

Rozumiem, mogę wkleić cały folder apache

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie masz przestrzeni wymiany (swap).

 

 

1. Zainstaluj sysstat i odpal w interwale 5 min to będziemy wiedzieli co zjada zasoby i jakie:

 

http://www.leonardoborda.com/blog/how-to-configure-sysstatsar-on-ubuntudebian/

 

2. Utwórz i aktywuj partycję wymiany albo jak nie masz możliwości to plik wymiany:

 

http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Plik sysstat odpalony. Z plikiem wymiany niestety jest problem, nie odpalę go bo mam OpenVZ wirtualizację. Ale i tak zmienie na dniach vpsa bo ten miał być tymczasowy. Więc na obecną chwilę drugi krok odstawiam na potem (kwestia kilku dni). Dzięki za pomoc. Dzisiaj będę miał duży ruch, takżę wrzucę po wszystkich statystyki z sysstata.

 

A takto dokończę resztę jak kupie jakiegos KVM albo ewentualnie kupie ovz ale ze swapem

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Już jednemu użytkownikowi pomogłem. Zamiana na nginx + php-fpm i dodatkowo zamiana skryptu zamieniającego IP na lokalizację i okazało się, że nawet mały VPS z polskiej firmy obsłuży duży ruch. Ok. 0.5mln requestów w 3 godziny to niezły wynik jak na maluszka

Edytowano przez Misiek08 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Już jednemu użytkownikowi pomogłem. Zamiana na nginx + php-fpm i dodatkowo zamiana skryptu zamieniającego IP na lokalizację i okazało się, że nawet mały VPS z polskiej firmy obsłuży duży ruch. Ok. 0.5mln requestów w 3 godziny to niezły wynik jak na maluszka

 

A skąd wiesz że to wina apache 2.2 + mod_php?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Łącze jest, wszystko działa dopóki nie ma dużego obciążenia. Duże obciążenie na Apache'u ze względu na jego budowę powoduje ogromny skok zużycia pamięci, a alternatywne serwery radzą sobie z jej zarządzaniem dużo lepiej.

 

Edit:

Nawet jeśli teraz przywróci Apache do życia to niebawem ruch urośnie i znowu problem.

Poza tym skoro brakuje RAMu to polecać koledze SWAP? To po co mu w ogóle RAM, niech tylko na dysku SWAPuje wszystko - będzie szybciej!

Edytowano przez Misiek08 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dalej są problemy z pamięcią?

 

Jeżeli tak to ja dalej się będę upierał przy nginx + php-fpm.

 

Przy okazji jakieś statystyki ruchu możesz podać?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Z nginx'em cały serwer odżyje :D pamiętam jak ja zmieniłem apache na nginx'a to naprawdę sporo zasobów procka i ram maiłem wolnych

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nginx + FPM to przecież lekarstwo na wszystkie choroby, owszem zużywało by to mu mniej zasobów bo nginx domyślnie uruchamia mniej procesów niż apache no i jego architektura wymusza mniejsze zużycie pamięci, ale do cholery - to byłą by dobra rada, gdyby miał 128MB ram, a nie 4GB.

Bez znaczenia czy tam wrzucisz nginx czy php-fpm, skoro masz VPS openVZ oparty o stary BC bez vswap - czyli zliczający zużycie VSZ, a nie RSS musisz zmniejszyć wielkość stosu.
Odsyłam:
http://openvz.org/Stack_size

SQL zostaw w spokoju, ale apache, bind'a itd.. powinien spokojnie działać na 128/256.
Reasumując dopisujesz ulimit -s 128 do:
/etc/init.d/apache2 lub /etc/init.d/httpd


W razie problemów po prostu zwiększ stos.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×