Skocz do zawartości
komar07

Dziwne zachowanie Apache

Polecane posty

Witam serdecznie

Jestem po świeżutkiej instalacji nowego dedyka SuperPlan BestOF z oferty OVH na centos i mam mały problem z apache jak sądzę.

 

Mianowicie strony zawieszają się w pewnym momencie na 3-5 sekund po czym dogrywają się. Np. strona wczytuje się do połowy następuje przerwa i po 5 sekundach doczytuje się reszta.

Dotyczy to większości stron na serwerze, tych które mają większą treść - tak jakby wczytywała się określona ilość danych i cięło pasmo. Na małych stronkach się tak nie dzieje.

 

Co najdziwniejsze po restarcie httpd wszystko działa jak rakieta, zero przerwań pięknie płynnie itd. Po kilku minutach znowu zaczyna przycinać.

 

Przykład dużej strony na serwerze: http://www.ofertymieszkan.pl

Przykład małej strony na serwerze: http://motomed.com.pl/

 

Serwer jest postawiony tylko pod Apache nie ma na nim żadnych innych produkcyjnych usług.

load 0.82 (1 mins) , 0.75 (5 mins) , 0.65 (15 mins)

CPU w granicach do 10%

RAM: 1GB z 4

 

 

Jakieś pomysły ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Konfiguracja praktycznie standardowa + zwiększone limity

 

zmiany to:

 KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 10

<IfModule prefork.c>
StartServers	   40
MinSpareServers	25
MaxSpareServers   100
ServerLimit	  1250
MaxClients	  800
MaxRequestsPerChild  2000
</IfModule>

<IfModule worker.c>
StartServers		 1
MaxClients		 800
MinSpareThreads	 75
MaxSpareThreads	 375
ThreadsPerChild	 125
MaxRequestsPerChild  0
</IfModule>

<IfModule mod_mem_cache.c>
 CacheEnable mem /
 MCacheSize 1048576
 MCacheMaxObjectCount 2500
 MCacheMinObjectSize 1
 MCacheMaxObjectSize 26214400
</IfModule>

 

 

cały konfig (wyciąłem komentarze bo się post nie mieścił):

#
ServerRoot "/etc/httpd"

PidFile run/httpd.pid

Timeout 60

KeepAlive On

MaxKeepAliveRequests 500

KeepAliveTimeout 10

<IfModule prefork.c>
StartServers	   40
MinSpareServers	25
MaxSpareServers   100
ServerLimit	  1250
MaxClients	  800
MaxRequestsPerChild  2000
</IfModule>

<IfModule worker.c>
StartServers		 1
MaxClients		 800
MinSpareThreads	 75
MaxSpareThreads	 375
ThreadsPerChild	 125
MaxRequestsPerChild  0
</IfModule>

Listen 80

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule cgi_module modules/mod_cgi.so
#LoadModule version_module modules/mod_version.so

Include conf.d/*.conf

ExtendedStatus Off

User apache
Group apache

ServerAdmin root@localhost

UseCanonicalName Off

DocumentRoot "/var/www/html"

<Directory />
 Options FollowSymLinks
 AllowOverride None
</Directory>

<Directory "/var/www/html">
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

<IfModule mod_userdir.c>
 UserDir disable
</IfModule>

DirectoryIndex index.html index.html.var index.shtml index.cfm index.php index.htm

AccessFileName .htaccess

<Files ~ "^\.ht">
 Order allow,deny
 Deny from all
</Files>

TypesConfig /etc/mime.types

DefaultType text/plain

<IfModule mod_mime_magic.c>
#   MIMEMagicFile /usr/share/magic.mime
 MIMEMagicFile conf/magic
</IfModule>

HostnameLookups Off

ErrorLog logs/error_log

LogLevel warn

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

CustomLog logs/access_log combined

ServerSignature On

Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
 Options Indexes MultiViews
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

<IfModule mod_dav_fs.c>
 # Location of the WebDAV lock database.
 DAVLockDB /var/lib/dav/lockdb
</IfModule>

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
 AllowOverride None
 Options None
 Order allow,deny
 Allow from all
</Directory>

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

AddHandler type-map var

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

Alias /error/ "/var/www/error/"

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
 <Directory "/var/www/error">
	 AllowOverride None
	 Options IncludesNoExec
	 AddOutputFilter Includes html
	 AddHandler type-map var
	 Order allow,deny
	 Allow from all
	 LanguagePriority en es de fr
	 ForceLanguagePriority Prefer Fallback
 </Directory>
</IfModule>
</IfModule>

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Druga mi się dobrze wczytała. Pierwsza jest tak przepchana skryptami (również zewnętrznymi) że mnie wcale nie dziwi przycinka przy generowaniu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli pewnie apache w trybie prefork.

load 0.82 (1 mins) , 0.75 (5 mins) , 0.65 (15 mins)

Masz wysoki load.

 

StartServers	   40
MinSpareServers	25
MaxSpareServers   100
ServerLimit	  1250
MaxClients	  800

Apache to nie studnia bez dna i nie skaluje się liniowo przy zwiększeniu limitów. Mocno przesadziłeś z tymi wartościami i przy większym ruchu mogą one powodować czkawki. Z resztą nie masz około 10 GB pamięci ram, żeby obsłużyć 800 równoległych forków apache.

 

Ile osób masz maksymalnie jednocześnie online? Sprawdź czy obniżenie tych wartości nie pomoże.

StartServers	   16
MinSpareServers	16
MaxSpareServers   48
# ServerLimit	  256
MaxClients	  64

 

Zainstalowałeś jakiś accelerator do PHP (np. eaccelerator.net)? Sprawdź, które procesy obciążają system (polecenie top).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Czyli pewnie apache w trybie prefork.

load 0.82 (1 mins) , 0.75 (5 mins) , 0.65 (15 mins)

Masz wysoki load.

 

Może będzie, że się czepiam. Jednak uważam, że jest to mały load.

Wysoki load według mnie to 10-15+(uważam za coś nie odpowiedniego, możliwe spowodowanego jakimś "ładunkiem" fork).

Load do 5 można spokojnie uważać za odpowiedni, nie groźny.

Po prostu pisze to, bo bez sensu szerzyć takie pierdółki :-))

 

Co do konfiguracji, moja propozycja:

#Po co utrzymywać sesje aż 60 sekund, przecież 30 sekund powinno wystarczyć
Timeout 30

KeepAlive On

#Obniżymy trochę wartość
MaxKeepAliveRequests 150

#Możesz próbować tak od 1-3.
KeepAliveTimeout 1

#Wnioskuję, żę Twój apache to mpm-prefork.
<IfModule prefork.c>
StartServers	   5
MinSpareServers	5
MaxSpareServers   30
ServerLimit	  512
MaxClients	  512
MaxRequestsPerChild  1000
</IfModule>

 

Powinno być ok, ale próbuj.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Może będzie, że się czepiam. Jednak uważam, że jest to mały load.

Wysoki load według mnie to 10-15+(uważam za coś nie odpowiedniego, możliwe spowodowanego jakimś "ładunkiem" fork).

Load do 5 można spokojnie uważać za odpowiedni, nie groźny.

Po prostu pisze to, bo bez sensu szerzyć takie pierdółki :-))

Autor jako przykład dużej strony na serwerze podał stronę, która w rankingu Alexa na wynik, ponad 1 000 000, druga ponad 15 000 000. Możemy dyskutować na ile ranking alexa jest wiarygodny ale jak na serwer, o takiej konfiguracji sprzętowej, który serwuje wyłączeni strony WWW, które z kolei mają taką oglądalność load jest zdecydowanie za wysoki.

 

Z resztą nie bez powodu zapytałem ile osób online rejestruje serwer. Do tego ciekawi mnie też ile użytkowników na dobę odwiedza hostowane na nim strony.

 

[edit]

Kolega ma 4 GB pamięci RAM. Możesz mi wyjaśnić sens rozstrzału pomiędzy MinSpareServers 5 a MaxClients 512?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zrób xcache, wyłącz KeepAlive, spróbuj też z nginx zamiast apache... bądź połącz te dwie rzeczy, zoptymalizuj dyski, baze, połączenia i będzie śmigać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak zapewne wiesz load jest dość mało miarodajny i zależy od wielu czynników. A więc wnioskowanie czy load jest duży w stosunku do ruchu jest dużo, jest według mnie bez sensu. Ale przecież, nie będę Ci na siłę coś do głowy wbijał :-))

Jeżeli planujesz korzystać z tego serwera przez dłuższy okres to zatrudnij jakiegoś sys-admina, który Ci to okiełzna.

 

Co do wypowiedzi nade mną. Nie wiem dlaczego ludzie sądzą, że przy treści dynamicznej, wynalazki typu nginx, lighttpd, cherokee jakoś znacząco im pomogą. Swoją drogą jak się optymalizuje dyski ?

 

Dobra na koniec klepnę parę rad:

 

1- apache-mpm-worker

2- metoda działania php (fcgi, fastcgi)

3- coś co będzie kompilowało php do kodu bitowego. (np. eaccelerator)

4- nie rób tego sam, bo zaraz pojawi się nowy temat "Dziwne zachowanie po zmianie oprogramowania"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki panowie za sugestie, problem jest już rozwiązany.

 

Zamulał serwer jeden skrypt PHP, ale był on na tyle nie do wychwycenia, bo był odpalany cyklicznie z crona i nie powodował obciążenia systemu poprzez CPU czy ram ale generował taka ilość danych, że dysk miał problem z zapisem tego i na moment zawieszał całą maszynę.

Po wyłączeniu tego skryptu wszystko śmiga jak trzeba.

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ę


×