Skocz do zawartości
Zaloguj się, aby obserwować  
TheBlood

Minimalizacja obciążenia generowanego przez apache

Polecane posty

Od kilkunastu dni mam co raz większy problem, bo ilość osób online mocno wzrosła i dochodzi już nawet do 160 osób online i to na forum przemo... Niestety wówczas procesor jest obciążany w granicach 50-70%, load rośnie nawet do 3.00, no i samo forum przestaje zadowalająco działać. Mam zainstalowany eaccelerator (jako rozszerzenie php), apache i php zaktualizowane do najnowszej stabilnej dla debiana 4.0 wersji, no i przyznam szczerze, że nie mam już pomysłów jak zminimalizować obciążenie :/ Wiem, wiem, że mógłbym zmienić skrypt i stać mnie na jego zmianę, ale przemo jest najbardziej user-friendly, dlatego zależy mi na pozostaniu na tym skrypcie.

 

Jak można zminimalizować obciążenie generowane przez apache? Oto fragmenty konfiguracji serwera (Athlon 3000+, 1GB ramu):

 

apache2.conf:

 

Timeout 10

KeepAlive Off

 

<IfModule prefork.c>

StartServers 5

MinSpareServers 5

MaxSpareServers 25

MaxClients 150

MaxRequestsPerChild 50

</IfModule>

 

 

php.ini:

 

zlib.output_compression = On

 

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;

;;;;;;;;;;;;;;;;;;;

 

max_execution_time = 15 ; Maximum execution time of each script, in seconds

max_input_time = 30 ; Maximum amount of time each script may spend parsing request data

memory_limit = 25M ; Maximum amount of memory a script may consume (16MB)

 

 

display_errors = Off

 

log_errors = On

 

 

 

 

Na niektórych vhostach "włączone" jest:

 

Options +FollowSymLinks

 

Czy "śledzenie" zgodności refferera z adresem obrazka stanowi jakieś dodatkowe obciążenie dla serwera, czy jest raczej niewyczuwalne?

 

 

I może gdybym jakoś "okroił" system zapisywania logów, to obciążenie spadłoby nieco?

 

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

 

 

Z góry dziękuję za odpowiedzi i jakieś propozycje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pokaż ile masz wolnej pamięci (free -m), bez tego nie można za dużo napisać.

Jeżeli nie jesteś pewien, czy procesor obciąża apache (bo przecież MySQL też może być wąskim gardłem) wklej /etc/mysql/my.conf

 

Proponuję przetestować takie zmiany w konfiguracji apache:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 5

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 25
MaxClients 150
# !!!
MaxRequestsPerChild 2000
</IfModule>

 

Pokaż konfigurację eacceleratora.

 

Pokaż listę załadowanych modułów apache.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

free -m:

 

total used free shared buffers cached

Mem: 992 926 65 0 62 617

-/+ buffers/cache: 247 745

Swap: 502 0 502

 

 

htop:

 

Memory 236 / 992MB

Tasks 125

 

 

my.conf:

 

# * Fine Tuning

#

 

key_buffer = 16M

max_allowed_packet = 16M

thread_stack = 128K

ft_min_word_len = 3

table_cache = 300

 

#

# * Query Cache Configuration

#

query_cache_limit = 1M

query_cache_size = 16M

#

# * Logging and Replication

#

# Both location gets rotated by the cronjob.

# Be aware that this log type is a performance killer.

#log = /var/log/mysql/mysql.log

#

# Error logging goes to syslog. This is a Debian improvement :P

#

# Here you can see queries with especially long duration

log_slow_queries = /var/log/mysql/mysql-slow.log

long_query_time = 2

 

 

php.ini:

 

extension="eaccelerator.so"

eaccelerator.shm_size="16"

eaccelerator.cache_dir="/var/cache/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="0"

eaccelerator.shm_prune_period="0"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

 

 

 

Kombinowalem z KeepAlive, ale przy włączonym load sięga już 4, 5...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jeżeli KeepAlive nie pomaga to zostaw chociaż MaxRequestsPerChild powiększone - to powinno pomoc, chociaż trochę.

eaccelerator.shm_size="32" albo 64 .

 

Pokaż jeszcze ps aux.

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ę

Zaloguj się, aby obserwować  

×