Newsgroup: it.comp.os.linux.sys
Titolo: problema con carico server web

ciao a tutti
mi rendo conto che la domanda che sto per fare è piutosto generica...
ho un server linux sul quale girano apache+php5 e mysql5, sopra ci sono
4 siti web, uno di questi fa la maggior parte del traffico, da stats
circa 5000 utenti unici al giorno per 25.000 pagine, gli altri tre
totalizzano circa un decimo del traffico del primo, ogniuno.
Il problema è che il server è spesso sovraccarico. Se faccio un top,
l'impegno della cpu non va mai sotto al 20% e arriva sino al 70%.
Il top mi dice anche che chi piu impegna la cpu è httpd, e a volte
mysqld. Quando i servizi sono bloccati di solito ho un messaggio che
dice che il server db non è raggiungibile, dunque il problema dovrebbe
essere il db, ma di solito riesco a risolvere riavviando Apache, il
problema è che sto iniziando ad aver bisogno di riavviare apache un paio
di volte al giorno...
quello che volevo chiedere è come fare per ridurre il carico, come
posso fare per individuare quali sono le applicazioni che stanno
causando questo carico, insomma come fare un po di tuning a apache e
mysql...
come gia detto la domanda è un po generica ma non so da dove iniziare a
fare un analisi di cosa non stia funzionando come si deve...
grazie a tutti e scusate per la lunghezza del messaggio
-- 
manuel
Manuel
Linux Forum Staff - 
www.linuxforum.it
------------------------------------------------------------------------
manuel's Profile: 
http://www.linuxforum.it/member.php?userid=2
View this thread: 
http://www.linuxforum.it/showthread.php?t=5224

 
Prova ad aumentare il numero di processi httpd in esecuzione (direttive 
MaxSpareServer etc etc in httpd.conf).
Dovrebbe essere meno gravoso, in termini di prestazioni, avere dei 
demoni sempre pronti piuttosto che forkarli di volta in volta.

 mysqld. 
In genere quando ho gli apache piantati in questa maniera, il problema
e' sempre del db che o non e' raggiungibile, o ha qualche query lockata,
etc etc. Fai un'analisi delle query sul db, magari dello slow query e cerca
di capire se si puo' ottimizzare qualcoas. Vedi anche se il motore che
stai usando adesso va bene o magari puo' essere cambiato (per esempio
da myisadm a innodb), etc etc. Controlla anche i file di log di apache,
per vedere se ti da qualche errore strano.
-- 
Posted via a free Usenet account from 
http://www.teranews.com

 fare un analisi di cosa non stia funzionando come si deve...
Controlla, nell'ordine:
- query che si stanno facendo sul mysql (mysqladmin proc)
- che il codice PHP stia bene e non stia facendo petizioni verso cose
esterne ci mettono tempo a rispondere
- un occhio al server-status di Apache (è un modulo apposito per vedere
*cosa* sta facendo Apache in un dato momento)
-- 
Vide

 Se lo usi con tabelle myisam è ottimo, ma solo per quello.
Ma figurati... semmai è il contrario, visto che un aumento di carico (dovuto
al blocco dell'I/O) è molto più probabile con MyIsam che con InnoDB. Questo
semplicemente per il fatto che MyISAM blocca in scrittura le tabelle se c'è
una lettura in corso. Quindi se hai una SELECT pesante, tutti i processi di
INSERT/UPDATE rimangono in attesa che finisca la SELECT, con conseguente
aumento del load (e degrado delle prestazioni lato utente finale).
-- 
Vide

grazie per le risposte ora faro un po di verifiche sulla base dei vostri
suggerimenti.
per il tipo di tabelle penso che il db stia usando myIsam che se
ricordo bene è il tipo predefinito, non ho mai fatto tuning. L'uinica
cosa che mi viene in mente può essere l'upgrade che feci un po di tempo
fa dal 3.23 al 5, in pratica ho semplicemente disinstallato il 3.23 e
installato il 5, facendogli prendere i dati della versione precedente,
pensate che questo possa aver causato problemi? in ogni caso il db è
ripartito all'istante senza perdita di dati...


 ripartito all'istante senza perdita di dati...
Hai saltato DUE major version...diciamo che hai avuto culo che abbia
funzionato al primo colpo :D
Cmq sicuramente saranno MyIsam le tabelle.
-- 
Vide

 Uno su tutti wikipedia...
Wikipedia fa un altissimo uso di memcached, gli accessi che fanno
al DB sono ridotti all'osso.


 suggerimenti.
c'č una funzione di mysql administrator per la compattazione delle tabelle.
usa quella.

 performance scarsissime.
Mi sembra che le macchine allora erano dimensionate male, o le query fatte
col didietro, perchè qui da me (e di accessi al DB ce ne abbiamo un
discreto numero) i vantaggi di InnoDB surclassano la comunque presente
minore velocità rispetto ad MyIsam. So benissimo che se, per esempio, devi
fare una count di una tabella grossa MyIsam è ordini di magnitudine più
veloce di InnoDB, però non condivido affatto questa opinione così estrema
su InnoDB a favore di MyISAM (non voglio entrare in guerre di religione fra
un DBMS e un altro, rimaniamo pure sui motori di uno stesso programma).
-- 
Vide

dopo aver letto un bel po in giro ho modificato qualcosa in my.cfg.
adesso il carico massimo della cpu che ho osservato è circa 25%. la
configurazione che sto usando è questa (per adesso lascio myisam):
-----------------------------------------------------------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
set-variable = max_connections=450
set-variable = key_buffer=16M
set-variable = myisam_sort_buffer_size=64M
set-variable = join_buffer=1M
set-variable = record_buffer=1M
set-variable = sort_buffer=2M
set-variable = table_cache=1024
set-variable = thread_cache_size=64
set-variable = wait_timeout=14400
set-variable = connect_timeout=10
set-variable = max_allowed_packet=16M
set-variable = max_connect_errors=10
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit=8192
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[myisamchk]
set-variable = key_buffer=64M
set-variable = sort_buffer=64M
set-variable = read_buffer=16M
set-variable = write_buffer=16M
-----------------------------------------------------------------
una domanda: ho letto un po in giro di APC (alternative php cache).
secondo voi può servire ad alleggerire il lavoro del serverdb?
grazie ancora per le preziose indicazioni


 secondo voi può servire ad alleggerire il lavoro del serverdb?
Beh, se sei sicuro che il problema siano i troppi accessi al
db, usare un meccanismo di cache come APC puo' essere una soluzione
al problema. Dovresti usarlo in ram pero', quindi fai una stima di
quanta roba dovresti cachare, e di quanta ram hai a disposizione.

mmm
veramente pensavo che la cache fosse su disco
se č in mem potrei avere qualche problema, le richieste non sono
tantissime ma le pagine si, e io ho solo 512 su quel server
