Newsgroup: it.comp.os.linux.sys
Titolo: iostat

Ciao a tutti, questo è un report di iostat.
Mi fa strano che ci siano 35 write request al secondo e quasi sempre 0
letture... E' un server web con un database mysql in locale. Il server
è molto trafficato, fa circa 5mbit costanti di traffico...
Le scritture sono molto probabilmente mysql. Il database è usato
solamente da degli script php che girano sulla stessa macchina quindi
è impossibile che ci siano delle INSERT eseguite da una macchina
esterna. Per esserci una INSERT (o update o altre query in scrittura)
ci deve per forza essere una lettura allo script php eseguito via
web...
Come è possibile 35 scritture e 0 letture?
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          77.50    0.25    3.50    1.00    0.00   17.75
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00   158.42  0.00 35.64     0.00  1560.40
43.78     0.59   16.67   4.22  15.05
dm-0              0.00     0.00  0.00 29.70     0.00   237.62
8.00     0.23    7.87   0.40   1.19
dm-1              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00 136.63     0.00  1093.07
8.00     2.30   16.87   0.87  11.88
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          72.57    0.00    4.24    1.75    0.00   21.45
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00   111.00  0.00 34.00     0.00  1160.00
34.12     0.70   20.59   3.88  13.20
dm-0              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00 145.00     0.00  1160.00
8.00     2.58   17.77   0.91  13.20
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          78.95    0.00    4.26    0.75    0.00   16.04
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00    57.58  0.00 32.32     0.00   719.19
22.25     0.63   19.62   4.62  14.95
dm-0              0.00     0.00  0.00  2.02     0.00    16.16
8.00     0.05   24.00  12.00   2.42
dm-1              0.00     0.00  0.00  9.09     0.00    72.73
8.00     0.24   26.22   5.78   5.25
dm-2              0.00     0.00  0.00 78.79     0.00   630.30
8.00     1.31   16.62   1.90  14.95
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          76.49    0.50    3.96    1.24    0.00   17.82
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00    66.00  0.00 35.00     0.00   808.00
23.09     0.54   15.54   4.46  15.60
dm-0              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00  0.00 16.00     0.00   128.00
8.00     0.28   17.75   3.25   5.20
dm-2              0.00     0.00  0.00 85.00     0.00   680.00
8.00     1.43   16.80   1.60  13.60
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          73.93    0.75    4.01    1.00    0.00   20.30
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00   130.00  0.00 49.00     0.00  1432.00
29.22     0.85   17.39   4.16  20.40
dm-0              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00 179.00     0.00  1432.00
8.00     2.82   15.75   1.14  20.40
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          75.12    0.00    3.98    1.49    0.00   19.40
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz
avgqu-sz   await  svctm  %util
cciss/c0d0        0.00   118.00  0.00 36.00     0.00  1232.00
34.22     0.59   16.44   5.22  18.80
dm-0              0.00     0.00  0.00 17.00     0.00   136.00
8.00     0.26   15.29   1.18   2.00
dm-1              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.00 98.00     0.00   784.00
8.00     1.80   18.37   1.47  14.40
dm-3              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-4              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00  0.00  0.00     0.00     0.00
0.00     0.00    0.00   0.00   0.00

 Come è possibile 35 scritture e 0 letture?
E` probabile che la maggior parte delle tabelle usate degli script siano 
ormai in cachate nella RAM, e le scritture potrebbero essere i soliti 
aggiornamenti di atime.
Prova a inserire noatime in fstab tra le opzioni della partizione dove 
tieni i DB.
Bye.

 ormai in cachate nella RAM
Che bestialita` ho scritto?!? :)

 tieni i DB.
Ok, lo farò appena mi daranno autorizzazione a riavviare il server.
Ma se così non dovessi risolvere, dove potrei andare a sbattere la
testa?
Il cliente lamente dei grossissimi rallentamenti negli accessi al
sito..
E' un sito di scambio banner pubblicitari, mezzo mondo richiama degli
script
dinamici prensenti sul server e di conseguenza se il server è lento,
anche il mezzo
mondo che cerca di accedergli sarà lento...
La macchina dovrebbe essere sovradimensionata: Xeon QuadCore 1.86GHz,
2GB di RAM, dischi SAS da 146GB con controller raid hardware in RAID1.
Aggiornare la ram dubito possa aiutarmi se il problema fossero (come
immagino) le scritture.
Ed anche aggiornare il processore non vedo come potrebbe aiutarmi.
In tal caso come si fa? Aggiungere dischi potrebbe aiutare? Dubito,
anzi, rallenterebbe dato che le scritture saranno effettuate sue 3
dischi anzichè 2...


Perchè?

 Ok, lo farò appena mi daranno autorizzazione a riavviare il server.
basta un mount -o remount,noatime /partizione


Forse prima dovrebbe fermare i servizi...
Cioè: non potrebbe far danni rimontare una partizione mentre un
processo ci opera sopra?
Sicuramente perde meno uptime rispetto ad un riavvio, ma a rischi come
stiamo messi?
Emanuele

 wrote:

Allora, ho riavviato.
Non è cambiato praticamente nulla.
Appena le connessioni iniziano a salire, il server implode.
La macchina è uno Xeon QuadCore 1.86GHz, 2GB di ram, dischi SAS 10k
146KB in RAID 1 hardware.
Apache è configurato in questo modo:
    StartServers          50
    MinSpareServers       20
    MaxSpareServers       80
    MaxClients          1000
    MaxRequestsPerChild   800
    KeepAlive Off
MySQL è configurato per consentire 500connessioni silmultanee (set-
variable = max_connections=500) dato che con 300-400 arrivavo al
limite.
iostat ora è migliorato (vedo delle letture, probabilmente a causa
della cache svuotata dopo il riavvio) ma la macchina resta sempre
inutilizzabile.
Lato console, non vedo alcun rallentamento, i problemi ci sono solo
nella sezione 'web'.
Non ho slow query, e la media di qps è pari a circa 80-100.
La cosa bizzarra è che settimana scorsa, con 5mbit di traffico, non
avevo alcun problema.
Oggi, con il traffico pari a 1.5mbit (quindi meno della metà) la
macchina è inutilizzabile.

 Il cliente lamente dei grossissimi rallentamenti negli accessi al sito..
Devi trovare il collo di bottiglia.
Gli script in che linguaggio sono scritti? Puoi precompilarli o tenere in 
cache i precompilati? La rete regge? Non solo il server, ma anche gli 
switch, i firewall, i router, reggono cosi` tante connessioni? Hai messo 
(se e` il caso) un server web apposta per servire contenuti statici (tipo 
lighttpd sulla porta 8888)?
Bye.

 lighttpd sulla porta 8888)?
No, non credo sia il caso. Non ho contenuti statici.
Comunque sia, anche se mettessi un server web sulla 8888, come faccio
a dire che il dominio 
www.ciccio.it
 deve andare sulla 8888? Così su
due piedi non mi viene in mente niente.
Htop mostra che il processo padre "mysqld_safe" ha il 100% di CPU.
La macchina è un quadcore, quel 100% si intende complessivo su tutte e
4 le CPU (quindi processore saturo) o si intende per singolo core?
(quindi il 100% di saturazione diventa un 400% nel caso di un quad
core saturo).
domani mattina sposto il database (600K) su un server mysql dedicato,
quad core 2.5, 2GB di ram e dischi SAS da 15k RPM in RAID1 hardware.
Spero di risolvere, se nemmeno così si risolvesse, come diavolo si fa
a clusterizzare un mysql?
So clusterizzare un mysql come letture (1 master, X slave), ma le
insert che vanno propagate su tutti i nodi, come diavolo si
clusterizzano?

 limite.
non so se con PHP si possa fare, penso di sì comunque, ma se riesci a
mantenere persistenti le connessioni potrebbero esserti sufficienti meno
di una decina di connessioni, le prestazioni dovrebbero migliorarti di
qualche ordine di grandezza perché aprire una connessione non è una
operazione che non richiede risorse.
Ciao, Micky
-- 
What's this hash prompt on my terminal mean?
Micky Del Favero  -  System Manager  &  BOFH

 clusterizzano?
Circa facendo scrivere gli autoincrement a passi di n dove n >= numero
di nodi e poi metti i nodi in circolo, ma con 600k di database non serve
a nulla metterlo in cluster, basta lo configuri diversamente. Sicuro di
non avere qualche tabella rovinata? Ogni tanto MySQL impantana una
tabella a caso e serve repair_table
HTH, Micky


 tabella a caso e serve repair_table
Ok per il cluster.
Dubito di avere tabelle rovinate ma domani faccio un controllo
approfondito per
averne la certezza.

 operazione che non richiede risorse.
Si si può fare, ma io non posso metter mano allo script non è mio ed è
criptato.
Lo script così è e così resta. Purtroppo.
Detto questo:  considera che lo script è un programma di advertising,
le query in scrittura
sono generate durante la visualizzazione di banner su siti esterni (il
sito esterno carica una immagine dinamica mediante
lo script presente sul mio server) quindi le connessioni persistenti
dubito mi possano servire a qualche cosa dato che
una connessione è, per sua natura, usa-e-getta. Una volta che ho letto
il banner ed aggiornato il contatore di impression è finita li.
Il problema è che i siti su cui sono presenti banner fanno alcune
centinaia di migliaia di visite giornaliere, questo significa
altrettanto traffico sul
server del mio cliente, ed i siti sono una decina (10*500.000 = un
sacco di scritture)

 MySQL.
Mytop è già presente.
Indica una media di 80qps e 250-350 threads.
Sono una infinità di INSERT/UPDATE ed alcune SELECT...
(io dubito altamente sulla capacità di calcolare le qps di mytop, 80
al secondo sono troppe rapportato ai 350 threads.)

 Sono una infinità di INSERT/UPDATE ed alcune SELECT...
Ho i miei "2 cent" da dare alla discussione:
Stai usando un filesystem con journaling vero? Io sul mio portatile con 
ssd sono tornato a ext2, senza journaling per evitare le scritture 
"inutili", diminuiscono veramente di tanto in questo modo.
Non so se ho capito male, ma il database è di 600k? Potresti provare con 
  il filesystem su ram (ramfs) per vedere se il collo di bottiglia è il 
disco. Se lo è, esistono dei "dischi" composti da banchi ram con 
batteria di backup che gli danno un giorno circa di autonomia se non 
alimentati. La velocità è spaventosa ovviamente, ma devi usarli con un 
backup giornaliero e un po' di testa ;-)
Facci sapere! :-D
Ste

 disco.
E' vero anche quello.
Però più che acquistare quei costosi dischi, tanto vale fare 1 dump
ogni minuto o ogni 30 secondi... 600k sono una bazzecola.
Forse, meglio ancora la copia secca della directory con il database
più che un dump.
Di certo perderei le modifiche non ancora scritte su file, ma copiare
600k ci vuole 1 secondo, fare un dump con moltissimi record ce ne
vogliono 40...