Comprare un piano più grande è rapido, e a volte è giusto. È anche il modo più comune di spendere soldi per un problema che era un indice mancante o una sola chiamata API lenta. Dieci minuti di misure lo decidono.

Le sta davvero finendo la memoria

free -h
vmstat 1 5

In vmstat legga le colonne si e so: pagine che entrano ed escono dallo swap al secondo. Numeri diversi da zero che durano vogliono dire che alla macchina la memoria manca davvero. Gli zeri vogliono dire di no, qualunque cosa dica la colonna free.

Linux usa apposta la memoria libera come cache del disco. Una macchina che dichiara quasi nessuna memoria libera e nessuno swap sta bene - veda RAM, swap e quando lo swap è un sintomo.

Che cos'è invece, di solito

  • Una query lenta. Una query senza indice su una tabella che cresce. Veda lo slow query log.
  • L'attesa di qualcos'altro - un'API di pagamento, un server di posta, un feed remoto - dove il server è fermo, non occupato.
  • Il disco. Un iowait alto in top vuol dire che il limite è l'archiviazione; più memoria aiuta soltanto mettendo in cache attorno a quel limite.
  • Un core della CPU inchiodato da un lavoro a thread singolo mentre gli altri se ne stanno fermi.

Li legga separatamente

top -b -n1 | head -15        # load, iowait, what is busy
iostat -x 1 3               # disk latency and utilisation
ss -s                       # connection counts

Quando più RAM È la risposta

  • Swap continuo con traffico normale.
  • Un insieme di lavoro del database più grande di quanto lei possa dare al buffer pool - veda innodb_buffer_pool_size.
  • Un pool PHP che non riesce a dimensionare abbastanza grande per il suo traffico senza sforare la memoria.
Prima misuri, poi aggiorni. Cambiare piano è facile da fare e scomodo da disfare, e la query lenta dopo è ancora lì - ora su una macchina che costa di più.