Soluzione 1:
Questo è perfettamente normale.
All'avvio del sistema, vengono avviati numerosi servizi. Questi servizi si inizializzano, leggono i file di configurazione, creano strutture dati e così via. Usano un po' di memoria. Molti di questi servizi non verranno mai più eseguiti per tutto il tempo in cui il sistema è attivo perché non li stai utilizzando. Alcuni di essi possono durare ore, giorni o settimane. Eppure tutti questi dati sono nella memoria fisica.
Naturalmente, il sistema non può buttare via questi dati. Non può provare che letteralmente non sarà mai accessibile. Uno di questi servizi, ad esempio, potrebbe essere quello che ti fornisce l'accesso remoto alla casella. Potresti non averlo usato in una settimana, ma se lo usi, ha funzionato meglio.
Ma il sistema sa che potrebbe voler usare quella memoria fisica per cose come una cache del disco o in altri modi che miglioreranno le prestazioni. Quindi fa scambi opportunistici. Quando non ha niente di meglio da fare, scrive su disco i dati che non sono stati utilizzati da molto tempo, utilizzando lo spazio di swap. Tuttavia, mantiene ancora le pagine nella memoria fisica. Quindi è ancora possibile accedervi senza doverli scambiare.
Ora, se il sistema in seguito necessita di quella memoria fisica per qualcos'altro, può semplicemente buttare via quelle pagine perché le ha già scritte per lo scambio. Questo dà al sistema il meglio di entrambi i mondi. I dati sono ancora conservati in memoria, quindi è possibile accedervi senza doverli leggere dal disco. Ma se il sistema ha bisogno di quella memoria per un altro scopo, non dovrà scriverla prima. Grande vittoria ovunque.
Soluzione 2:
Questo può accadere se in passato hai avuto bisogno di più memoria di quanta ne hai RAM fisica nella macchina. A quel punto alcuni dati saranno stati scritti nello spazio di swap.
Quando successivamente la memoria viene liberata, i dati dallo scambio non vengono riletti automaticamente nella RAM:ciò accade solo quando i dati nello scambio sono effettivamente necessari a qualche processo. Questo è perfettamente normale.
Per quanto riguarda il tuo processo mysql:tutto dipende dal tipo di query che esegui. In teoria 2 query molto complesse potrebbero probabilmente essere sufficienti per ottenere un tale carico, indipendentemente dal numero di utenti. Puoi abilitare il registro delle query lente per ottenere maggiori informazioni su quali query richiedono un carico elevato.
Soluzione 3:
Puoi anche modificare questo comportamento con sysctl -w vm.swappiness=10
, che ridurrà notevolmente l'uso dello swap fino a quando non sarà effettivamente necessario.
Per quanto riguarda MySQL, hai almeno eseguito un test di configurazione di base utilizzando lo script tuning-primer.sh?