Weboldal lassulás, 503-as hibázás alacsony CPU, IO, network használat mellett

Hi all!

Egy webszerverről van szó. EZ a weboldal fut rajta, itt pedig a Munin statisztika található.

A statból nekem az derül ki, hogy nem a cpu vagy a hdd terhelődik túl és nem tűnik kevésnek a memória. Elvileg nem DDoS-olnak, az apache log nem árulkodik semmi ilyenről. A napi lapbetöltés 8-10 ezer.

A weboldalról annyit, hogy képnézegető az oldal, majd minden adatbázis lekérdezések cache-elve vannak, load nem magas, htop-ban a cpu terheltség is alacsony. Jelenleg nincs ötletem, hogy a lassulást mi okozza.

apache2.conf-ban a MaxClient mindenhol 400, ha esetleg a szálakkal lenne gond. A hálókártya esetleg nem bírná a túl sok kapcsolati szálat?

Hozzászólások

Nem a mysql kapcsolatok fogynak el véletlenül? Okozhatja beragadó queryk halmaza is, a show full processlist-el kiderül.

Mivel sok esetben előre vannak json-nal kódolva mentve a tipikus adatbázis lekérdezések file-ba, így nem túl gyakori dolog a mysql_query. Kapcsolódás persze van minden lapbetöltéskor, de azok le is vannak vissza zárva.

Mindenesetre köszi a tippet, holnap délután nagyobb terhelés idején megnézem hátha ez mutat valami anomáliát.

Kollégám az Apache-ra gyanakodik, időközönként előfordul olyan, hogy csak ez a weboldal nem tölt be, más weblap megjelenik ugyanarról a szerverről (bár ez lehet, hogy csak a cache-nek köszönhető...), de van, hogy abszolút nem válaszol az apache és csak a /etc/init.d/apache2 restart segít...

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

IspCP Omega van a szerveren, utánagugliztam ezek a beállítások elvileg /etc/apache2/mods-enabled/fcgid_ispcp.conf helyen kellene legyenek, szal oda szúrtam be azt a pár sort.
Újraindítás után egy ideig jól megy a rendszer, aztán hal le idővel. Tehát most restart volt, megy, meglátom meddig.

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

find: `*apache.conf*': No such file or directory

Amúgy most visszaállítottunk minden config file-t alap, gyári beállításokra. A helyzet változatlan. Fut az oldal kb 5 percig, aztán belassul és "Nincsenek adatok".

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

root@ks3289370:/var/log/apache2# ls -l /etc/apache2
total 72
-rw-r--r-- 1 root root 8076 Dec 15 11:25 apache2.conf
drwxr-xr-x 2 root root 4096 Dec 10 19:43 conf.d
-rw-r--r-- 1 root root 1169 Nov 30 2012 envvars
-rw-r--r-- 1 root root 0 Feb 25 2013 httpd.conf
drwxr-xr-x 2 root root 4096 Dec 10 19:43 ispcp
-rw-r--r-- 1 root root 31063 Nov 30 2012 magic
drwxr-xr-x 2 root root 4096 Feb 25 2013 mods-available
drwxr-xr-x 2 root root 4096 Feb 25 2013 mods-enabled
-rw-r--r-- 1 root root 751 Dec 15 11:57 ports.conf
drwxr-xr-x 2 root root 4096 Feb 25 2013 sites-available
drwxr-xr-x 2 root root 4096 Feb 25 2013 sites-enabled

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

Igaz ez i-mscp de ispcp omega forkja (azért az i-mscp jobban karbantartott)
Szóval a conf fálj:

# MODULE SETUP: Do not change this unless you know what you're doing
########################################################################
AddHandler fcgid-script .php .php5
SocketPath /var/lib/apache2/fcgid/sock
FcgidMaxRequestsPerProcess 1000
FcgidPassHeader AUTHORIZATION

# ADMIN PREFERENCES: These control different limits as described below
# Notice: These settings can be overwritten for a single website by
# specifying them inside the website's custom configuration file:
# /etc/apache2/ispcp/website.tld.conf
########################################################################

# Maximum request time in seconds (a script will be killed if it
# runs for more time than that)
FcgidBusyTimeout 300

# Maximum time before the request generates some data (a script will be
# killed if it doesn't generate any output before this number of seconds)
FcgidIOTimeout 300

# Maximum request length in bytes. No request larger than that will ever
# be processed, so this has to be higher than the biggest file upload you
# want to allow.
FcgidMaxRequestLen 104857600

# PERFORMANCE SETTINGS: Used to limit the memory requirements
########################################################################

# Maximum number of php5-cgi processes allow to run among all websites
FcgidMaxProcesses 200

# Maximum number of php5-cgi processes allowed to run for a single website
FcgidMaxProcessesPerClass 20

# Minimum number of php5-cgi processes running for each website. Only set
# this to 1 or higher if your server has very few domains. Do not set it
# higher if you have many domains, even if they are rarely accessed, or
# you will eat up all of the server's RAM and force it to swap to death.
FcgidMinProcessesPerClass 0

Hopp, ez a /etc/apache2/mods-enabled/fcgid_ispcp.conf file nálam, viszont az
Fcgid kezdetű bejegyzések nincsenek benne.

Ezt tartalmazza:

<IfModule mod_fcgid.c>

AddHandler fcgid-script .php .php5

SocketPath /var/lib/apache2/fcgid/sock

IdleTimeout 600

IdleScanInterval 120

BusyTimeout 300

BusyScanInterval 120

ErrorScanInterval 3

ZombieScanInterval 3

ProcessLifeTime 30

SpawnScoreUpLimit 10

SpawnScore 1

TerminationScore 2

MaxProcessCount 200

DefaultMaxClassProcessCount 10

DefaultMinClassProcessCount 1

IPCCommTimeout 600

MaxRequestsPerProcess 300

FcgidConnectTimeout 60

MaxRequestLen 134217728

</IfModule>

Még korábban hozzáfűztem ezeket a beállításokat, nem volt rá semmi reakció. Esetleg írjam felül?

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_worker_module (static)
http_module (static)
so_module (static)
actions_module (shared)
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)
cgid_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
fcgid_module (shared)
mime_module (shared)
negotiation_module (shared)
proxy_module (shared)
proxy_http_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
suexec_module (shared)
Syntax OK

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

Akkor próbáld ki ezt a conf-t:
< IfModule fcgid_module>
AddHandler fcgid-script .php .php5
SocketPath /var/lib/apache2/fcgid/sock
FcgidMaxRequestsPerProcess 1000
FcgidPassHeader AUTHORIZATION
FcgidBusyTimeout 300
FcgidIOTimeout 300
FcgidMaxRequestLen 104857600
FcgidMaxProcesses 200
FcgidMaxProcessesPerClass 20
FcgidMinProcessesPerClass 0
< /IfModule>
Eredetiről mentést csinálj

Programszinten van adatbázis cache-elés. Most néztem meg, bő 47 ezer cache file volt az egyik cache mappában.
Ezeket most töröltem, a php-ban a cache-elést kikapcsoltam.

Egyelőre működik, megnézzük meddig.

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."

- Miért 320.000 a max apache process count? Kicsit soknak tartom. (Továbbá hangolnám a min és max spare server értékeket is, mert ha az idle 0-ra esik, akkor bizony belassul, és ha megtelik a backlog is, akkor el fogja dobni a kérést)
- Monitoroznám, hogy mennyi a fastcgi processz szám oldalanként, mert előfordulhat, hogy a 20-as MaxProcessPerClass kevés.
Egyszer készítettem rá egy munin plugint is: http://pastebin.com/zHVWaACi
A $cmd változó tartalmát kell olyanra faragni, hogy a megfelelő processzek adatait adja vissza.

(Szerk: utóbbiról egyébként a virtualhost logjába panaszkodik)

Saját használatra készült, nem nagyon van hozzá manual.

Ha elküldöd a /bin/ps aux | /bin/grep -i php-cgi | /bin/grep -v grep kimenetét (akár privátban), akkor visszaküldöm, hogy mi szerepeljen pontosan a $cmd változóban.

A telepítése úgy néz ki, hogy a monitorozandó gép /usr/share/munin/plugins könyvtárba elmented a scriptet php_cgi_ fájlnévvel, adsz rá futtatási jogot, majd a /etc/munin/plugins könyvtár alá csinálsz egy symlinket a fájlra php_cgi_count néven (tud memóriát is monitorozni, akkor php_cgi_memory néven kell létrehozni a symlinket).

Az új beállítások óta lassú a rendszer, de nem hal le - viszont rengeteg a zombi process.

Továbbra se stimmel itt valami. :/

-------------
"Az akadályok nem zúzhatnak össze. Minden akadály enged az eltökélt szándéknak."