Newsgroup: it.lavoro.professioni.webmaster
Titolo: Verificare un eccesso di server load

Ciao a tutti.
Recentemente il mio sito ha avuto un alto indice di server load (è un sito
php con un grosso database mysql). Per cercare di limitare i processi sto
utilizzando il caching, ma monitorando il valore di server load (8 Cpus)
talvolta trovo dei valori superiori a 10 (che poi si abbassano a 4-5).
Chattando con il servizio clienti del mio hosting mi è stato consigliato di
abilitare l'ssh access , scaricare WinSCP e di installare i tool per
verificare le cause di ciò che sovraccarica i processori.
Ora arrivo al punto....quali sono questi tool, che su Google e similari non
sono riuscito a trovare nozioni utili? O comunque, come faccio a verificare
quali processi mi causano un alto valore di Server Load?
Grazie in anticipo....

 Load?
Dire il sistema operativo che gira sul  server  non guasterebbe.
 

 php con un grosso database mysql). Per cercare di limitare i processi sto
La colpa è al 99.9% di Mysql, il cui peso sulla CPU è importante e ha il 
bruttissimo vizio di passare da basso-medio a macchina_inchiodata senza 
livelli intermedi al superamento di una soglia critica di lavoro sul 
database.
Questa la mia esperienza.
Verifica di avere impostato opportuni indici sulle tabelle del database 
e che le query siano efficienti e ridotte al minimo.

> Dire il sistema operativo che gira sul  server  non guasterebbe.
Giusta osservazione...scusami!
Il sistema operativo � Linux CentOS





Aggiungerei l'uso dei LOCK TABLE, che aiuta il backend MySQL a gestire in
modo ottimale l'accesso sulle tabelle. Informare correttamente il backend
aiuta a non raggiungere la "soglia critica" di cui parlavi, quella in cui
il server inizia ad andare in thrashing.
Le prestazioni vengono distribuite meno equamente ma, proprio per questo,
i colli di bottiglia si risolvono prima.
Da consolle, se il comando
SHOW STATUS LIKE 'Table%';
da' valori di WAITED minori dell'uno, due per cento di IMMEDIATE, o sulla
macchina non c'e' proprio carico, oppure ci sono pochi LOCK.
Altra cosa da non sottovalutare sono le opzioni DELAYED e LOW_PRIORITY in
modo da scaricare il database (per es.: contatori visite e cose simili si
possono mandare tranquillamente sulla corsia lenta).
Uno strumento diagnostico utile è lo slow query log
 
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
dove le query lente vanno sottoposte a EXPLAIN, e poi alle macumbe che si
rendessero necessarie (index, table splitting, partitioning, ed offerte a
Baron Samedi).
Anche se io preferisco registrare TUTTE le query complete di tempi, e poi
vedere quale query e' responsabile del maggior tempo: alcuni framework ad
esempio pestano durissimo sempre sulla solita tabella con frotte di query
brevi. A volte una pattuglia di UPDATE puo' essere accelerata con un LOCK
opportuno, a volte si possono individuare query mal progettate, oppure si
puo' adattare una query al proprio ambiente (per es.: framework, supporto
multilingue, JOIN con tabella lingue, pero' ci interessa solo l'italiano;
"SELECT language FROM config" si puo' sostituire con 'ITA' e ìsati).
A volte uno puo' sostituire una query complessa con... il risultato della
query complessa, eseguito non a ogni visita al sito ma ogni tot minuti, e
salvato in un file di cache. Con gli opportuni accorgimenti, si puo' fare
in modo che anche gli interventi su un framework complesso siano minimi.
Leonardo e un'ampia borsa di trucchi anche piu' sporchi
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

Il sistema operativo è Linux CentOS
Una volta che avrai acceduto al sistema (ma forse puoi arrivarci
direttamente con programmi tipo HeidiSQL, non so), prova anche a
entrare nella consolle mysql
	mysql tuodatabase
e a vedere se ti fa fare
	SHOW PROCESSLIST;
in un momento in cui il server e' "seduto". Se vedi roba pesante
che gira, puoi provare a vedere com'e' il query plan con EXPLAIN
e forse a ottimizzarlo.
Leonardo
