Come valutare un’offerta VPS economica
Analizza un’offerta VPS riga per riga: overselling delle vCPU, banda “illimitata”, NVMe, rinnovi, costi extra e test di accettazione in 30 minuti.
Cosa non include un’offerta VPS economica
Leggete un’offerta VPS economica al contrario, perché il prezzo è il dato meno utile della pagina. A determinare la qualità della macchina sono gli elementi che l’offerta non indica: il rapporto di overselling alla base del numero di vCPU, la clausola di fair use associata alla parola "illimitato", il prezzo di rinnovo dopo il primo periodo e l’eventuale addebito separato per i backup e l’indirizzo IPv4. Questa guida analizza un’offerta riga per riga, quindi propone un test di accettazione da eseguire sulla macchina finché è ancora possibile chiedere un rimborso.
Questo non significa che un prezzo basso sia necessariamente un inganno. Hardware meno recente, maggiore densità di istanze, supporto self-service e una ridondanza della piattaforma più limitata sono condizioni che rendono possibile un prezzo basso. Dovete sapere quale compromesso avete accettato prima che siano i vostri utenti a scoprirlo. Tutte le procedure riportate di seguito vengono eseguite su Ubuntu 24.04 con i pacchetti disponibili ad agosto 2026.
Una vCPU non è un core
Una vCPU è uno slot di pianificazione, non un componente fisico. In KVM (kernel-based virtual machine), ogni vCPU è un thread sull'host e lo scheduler dell'host assegna quel thread a un core fisico quando arriva il suo turno. Un host può vendere 4 vCPU a fronte di un solo core fisico, mentre ogni guest continua a riportare il proprio conteggio completo in nproc. Il numero indicato nell'offerta rappresenta il limite massimo di ciò che è possibile richiedere e non indica quali risorse siano riservate.
Il rapporto di overselling indica quante vCPU un host vende per ogni core fisico. Con un rapporto di 1:1, il core è riservato esclusivamente a te. I piani economici usano rapporti più elevati, che quasi mai vengono pubblicati. Considera quindi condivisa qualsiasi offerta che non specifichi "dedicated core" o "dedicated vCPU". La condivisione è sufficiente per la maggior parte dei carichi, perché la maggior parte dei server rimane inattiva per gran parte del tempo. Diventa un problema quando l'ora di maggiore attività coincide con quella di tutti gli altri utenti.
Puoi misurare l'effetto dall'interno del guest. Quando la tua vCPU è pronta per l'esecuzione, ma l'host assegna il core fisico a un altro guest, il tempo di attesa viene conteggiato come steal time: la colonna st in vmstat e %st in top. Lo steal time mostra nei tuoi metriche la presenza di un vicino rumoroso, ed è il valore più utile in questa guida, perché un'offerta non può falsarlo.
Un core dedicato resta comunque condiviso in altri aspetti. La larghezza di banda della memoria, la cache di ultimo livello e il percorso di storage appartengono all'intero host. La dicitura "dedicated vCPU" elimina la principale fonte di variabilità, ma non tutte.
Controlla anche il modello della CPU, con lscpu. Due piani possono indicare entrambi "4 vCPU", mentre la velocità del singolo thread differisce di un fattore 2, perché uno degli host utilizza una generazione di CPU molto più vecchia. Un hardware datato a basso costo può essere una scelta adeguata per un build agent, ma non per una pagina di checkout.
"Banda illimitata" indica almeno quattro prodotti diversi
Il traffico viene descritto in quattro modi, che non sono intercambiabili.
- Un plafond a consumo. L'offerta indica un numero, ad esempio "2 TB al mese". È importante sapere cosa succede dopo: un costo aggiuntivo per ogni TB extra oppure una riduzione della velocità a un valore molto basso fino al rinnovo mensile. Verificalo prima che diventi necessario.
- Un piano non misurato con una clausola di utilizzo corretto. Il traffico non viene conteggiato e la policy di utilizzo accettabile definisce il limite a parole anziché con un numero. Cerca in quel documento "fair use", "sustained", "excessive" e "abuse".
- Un limite alla velocità della porta. Una porta da 100 Mbit/s impone un limite fisico, indipendentemente da quanto dichiarato dalla policy sul traffico.
- Una combinazione degli ultimi due casi: traffico non misurato su una porta lenta. È la configurazione più comune nei piani economici ed è un'offerta trasparente, purché tu legga la velocità della porta.
The data behind this chart
[
{
"label": "100 Mbit/s",
"tb_ceiling_30d": 32,
"hours_per_tb": 22.2
},
{
"label": "200 Mbit/s",
"tb_ceiling_30d": 65,
"hours_per_tb": 11.1
},
{
"label": "500 Mbit/s",
"tb_ceiling_30d": 162,
"hours_per_tb": 4.4
},
{
"label": "1 Gbit/s",
"tb_ceiling_30d": 324,
"hours_per_tb": 2.2
}
]La velocità della porta è un limite massimo rigido e il calcolo è semplice. 100 Mbit/s corrispondono a 12.5 megabyte al secondo, quindi 30 giorni a piena velocità su quella porta consentono di trasferire circa 32 TB. Gli stessi 30 giorni su una porta da 1 Gbit/s consentono di trasferire 324 TB. Qui TB indica 10^12 byte, l'unità usata dagli host per la fatturazione. Si tratta di un calcolo teorico, non di una misurazione: nessun server utilizza la porta alla massima velocità per un mese intero.
È la seconda colonna a determinare le differenze tra i piani. Trasferire un singolo terabyte richiede circa 22.2 ore sulla porta da 100 Mbit/s e 2.2 ore sulla porta gigabit. Se il piano di ripristino consiste nel "scaricare il backup e ripartire", questo valore corrisponde al tempo di ripristino.
In questa riga delle specifiche sono nascosti altri due dettagli. "1 Gbit/s shared" significa che la porta è condivisa con altri clienti, quindi il limite indicato sopra rappresenta lo scenario migliore e non una garanzia. Inoltre, alcuni host fatturano il traffico in base al 95° percentile della velocità campionata, anziché in base al volume totale. In questo caso un carico costante può costare molto meno di un carico caratterizzato da picchi.
Indipendentemente da quanto indicato dal piano, misura il tuo utilizzo. vnstat legge i contatori dell'interfaccia e conserva lo storico.
sudo apt install -y vnstat
sudo systemctl enable --now vnstat
vnstat -d
vnstat -mSubito dopo l'installazione, vnstat stampa Not enough data available yet. perché il database non contiene ancora campioni. Torna il giorno successivo: vnstat -m mostrerà un totale mensile da confrontare con il plafond incluso nel piano che stai pagando.
La dichiarazione NVMe è reale? Come si può verificare?
lsblk -d -o NAME,ROTA,SIZE,MODELROTA pari a 0 indica che al guest è stato comunicato che il dispositivo non è rotazionale. Questo valore proviene dall'hypervisor, quindi descrive ciò che l'host pubblicizza e non il supporto sottostante. La colonna MODEL è generalmente vuota per un disco virtio come /dev/vda e mostra un valore generico QEMU HARDDISK per un disco collegato tramite SCSI. Si sta osservando un disco virtuale, quindi la sua etichetta non dimostra nulla.
La proprietà da verificare è la latenza. La distinzione effettiva è tra NVMe locale e volume collegato tramite rete. Un volume di rete può riportare un throughput sequenziale elevato e risultare comunque lento, perché il throughput viene misurato con molte richieste simultanee, mentre un database attende una singola scrittura di piccole dimensioni alla volta. Misurare la latenza con queue depth 1, quindi gli IOPS (operazioni di input/output al secondo) con una queue depth maggiore.
sudo apt install -y fio
fio --name=lat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=1 --numjobs=1 --runtime=60 --time_based --group_reporting
fio --name=iops --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=32 --numjobs=1 --runtime=60 --time_based --group_reporting
rm -f fiotestLeggere il blocco clat percentiles, in particolare la riga 99.00th. Questa è la latenza di completamento osservata dall'1% più lento delle richieste e corrisponde alla condizione percepita dall'utente come un blocco. Come riferimento indicativo, un NVMe locale con queue depth 1 risponde in centinaia di microsecondi, mentre un volume collegato tramite rete risponde in millisecondi. Confrontare i propri due test invece di affidarsi a un singolo valore pubblicato e ripetere la coppia di test tre volte nell'arco della giornata, perché un disco condiviso con altri tenant si comporta in modo diverso alle 03:00 e alle 20:00.
fio crea prima il file da 1 GB, quindi lasciare spazio sufficiente sul disco. Ricordare inoltre che il test consuma l'eventuale quota IOPS prevista dal piano. Se serve soltanto una lettura rapida, ioping -c 20 . restituisce la latenza su una sola riga. Un benchmark è utile solo se può essere ripetuto, quindi salvare i comandi esatti e l'output con la data.
Cosa è incluso e cosa viene fatturato a parte
- IPv4. Di norma è incluso un indirizzo. Alcuni piani economici assegnano un indirizzo condiviso dietro NAT (network address translation), con alcune porte inoltrate. In questo caso non puoi eseguire alcun servizio sulla porta 443 pubblica. Verifica con
ip -4 addr show scope globalecurl -4 https://icanhazip.com. Due risposte diverse indicano che sei dietro NAT. - IPv6. Un prefisso /64 instradato fornisce indirizzi per i container e per qualsiasi servizio che vuoi rendere raggiungibile dall'esterno. Un singolo /128 copre il traffico in uscita e poco altro.
- Backup. I backup automatici sono generalmente un'opzione a pagamento. Gli snapshot sono spesso gratuiti, ma uno snapshot risiede sulla stessa infrastruttura del disco di cui è la copia. Ti protegge quindi dagli errori di configurazione o dalle eliminazioni accidentali, ma non dalla perdita dell'host. Qualunque sia il piano, conserva una copia esterna al server.
- Protezione DDoS. Molti host rispondono a un attacco volumetrico di tipo distributed denial of service annullando l'instradamento del tuo indirizzo IP per un periodo prestabilito. Il server rimane operativo, ma non è raggiungibile da Internet. Chiedi quale sia la soglia di attivazione e per quanto tempo rimanga attivo il null route.
- Ambito del supporto. Con un piano non gestito, l'amministrazione del sistema è a tuo carico, mentre la responsabilità dell'host si limita all'hypervisor e alla rete. Questa è la principale differenza di costo effettiva tra due piani con specifiche identiche.
- Licenze e pannelli. Un control panel, un sistema operativo commerciale o un componente aggiuntivo per la posta possono costare ogni mese più del server stesso.
Quale tipo di virtualizzazione stai acquistando?
systemd-detect-virtkvm o qemu indicano la virtualizzazione completa: hai un kernel dedicato e puoi caricare i moduli che scegli. lxc, lxc-libvirt o openvz indicano un container che condivide il kernel dell’host. none indica un server bare metal.
La differenza è rilevante quando il kernel è condiviso. sudo modprobe wireguard non riesce e ip link add dev wg0 type wireguard restituisce RTNETLINK answers: Operation not supported, perché un container non può caricare un modulo del kernel che l’host non ha caricato. free -h può mostrare la memoria dell’host invece della memoria assegnata al container se lxcfs non è disponibile; di conseguenza, il monitoraggio legge valori che non descrivono il tuo server. Lo swap è spesso condiviso con altri container e eseguire macchine virtuali all’interno del tuo VPS non è possibile. I piani basati su container costano meno per un motivo, ma per un sito statico o una piccola applicazione restano comunque la scelta corretta.
Qual è il prezzo del rinnovo?
Il prezzo pubblicizzato copre spesso soltanto il primo periodo contrattuale. Cerca la dicitura "renews at" nella pagina dell'ordine e verifica la durata del periodo a cui si applica lo sconto. Uno sconto valido per un anno e uno sconto applicato per tutta la durata del piano sono prodotti diversi, anche se compaiono nella stessa prima fattura.
Leggi con la stessa attenzione le condizioni di rimborso. Verifica la durata del periodo di rimborso, se decorre dal momento dell'ordine o dall'attivazione del servizio, se gli extra, ad esempio gli indirizzi IP aggiuntivi, sono rimborsabili e se un pagamento annuale anticipato viene rimborsato pro rata. Imposta quindi un promemoria in calendario una settimana prima della data di rinnovo, perché il momento più conveniente per disdire è prima dell'emissione della fattura.
Anche cambiare provider in un secondo momento ha un costo. Trasferire alcune centinaia di gigabyte di dati, ricreare la configurazione, attendere la scadenza dei valori TTL (time to live) del DNS (domain name system) e, per un mail server, ricostruire la reputazione dell'indirizzo IP può richiedere un intero fine settimana. Considera anche questo lavoro quando un risparmio sembra conveniente. Quanto costa davvero un VPS in un anno è il valore da confrontare, non il primo mese.
Il test di accettazione di trenta minuti
Esegui questa procedura sul nuovo server prima di migrare qualsiasi servizio e quando la finestra per il rimborso è ancora aperta. Mettilo prima in sicurezza: i primi dieci minuti su un nuovo VPS coprono l’account utente, le chiavi e il firewall. Poi installa gli strumenti.
sudo apt update
sudo apt install -y sysbench fio ioping sysstat stress-ng vnstat mtr-tiny curlControllo 1: cosa mi hanno fornito realmente?
systemd-detect-virt
nproc
lscpu | grep -E 'Model name|MHz|Hypervisor'
free -h
lsblk -d -o NAME,ROTA,SIZE,MODEL
ip -4 addr show scope global
curl -4 -s https://icanhazip.comDovresti vedere il tipo di virtualizzazione, un modello di CPU e una quantità di memoria entro pochi punti percentuali rispetto a quella acquistata. Un output di free -h che indica molta più RAM rispetto a quella prevista dal piano significa che stai usando un container senza lxcfs, non che hai ricevuto memoria aggiuntiva. Un indirizzo pubblico restituito da curl che non compare in ip -4 addr indica che l’indirizzo IPv4 è condiviso.
Controllo 2: quanto è veloce un thread e quanto steal c’è sotto carico?
sysbench cpu --cpu-max-prime=20000 --threads=1 runRegistra la riga events per second. La velocità single-thread determina la rapidità con cui viene visualizzata una pagina e la durata di una compilazione. È anche il parametro che varia maggiormente tra i piani economici. Ora assegna un carico a ogni vCPU e osserva ciò che lo scheduler ti assegna realmente.
stress-ng --cpu 0 --timeout 300s &
vmstat 1 30
mpstat -P ALL 1 10--cpu 0 avvia un worker per ogni CPU online. Osserva la colonna st in vmstat e %steal in mpstat. Su un piano condiviso, valori occasionali a una cifra sono normali. Un valore di steal a due cifre mantenuto per diversi minuti indica che i core fisici sono sovraccarichi: il tuo lavoro resta in coda dietro quello di un altro tenant. Esegui nuovamente sysbench mentre il carico è attivo: un punteggio single-thread che crolla indica che le vCPU competono tra loro. Di solito significa che sono thread fratelli dello stesso core, non core separati. L’altro caso è un punteggio basso con steal quasi nullo: l’host applica un limite alla CPU, che non puoi vedere direttamente dall’interno del guest.
Controllo 3: come si comporta il disco con una queue depth pari a 1?
Esegui i due comandi fio della sezione NVMe e conserva entrambi i risultati: la latenza al 99° percentile con queue depth pari a 1 e gli IOPS con depth pari a 32. Poi controlla le scritture, perché molti volumi sono molto più lenti in questa direzione.
fio --name=wlat --filename=fiotest --size=1G --direct=1 --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --numjobs=1 --runtime=30 --time_based --group_reporting
rm -f fiotestUn valore sequenziale dd è il numero che gli annunci citano più volentieri e il meno utile che puoi raccogliere, perché lo streaming sequenziale non rappresenta il carico quotidiano di un database o di un’applicazione web sotto carico. Raccoglilo se vuoi effettuare il confronto. Valuta invece la latenza.
Controllo 4: come appare la rete dal punto in cui si trovano gli utenti?
Per prima cosa scarica un file di grandi dimensioni sul VPS.
curl -o /dev/null -w 'in: %{speed_download} bytes/s\n' https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xzQuesto verifica un solo percorso verso il server e nient’altro. La direzione importante è quella percorsa dagli utenti. Perciò pubblica un file e scaricalo da una macchina vicina a loro.
fallocate -l 100M /var/tmp/100mb.bin
python3 -m http.server 8080 --directory /var/tmpPoi, da un laptop o da un server vicino al tuo pubblico:
curl -o /dev/null -w 'down: %{speed_download} bytes/s\n' http://YOUR_SERVER_IP:8080/100mb.bin
mtr --report --report-cycles 50 YOUR_SERVER_IPDurante il test, la porta 8080 deve essere aperta nel firewall. Al termine chiudila, elimina il file e arresta il server Python con Ctrl+C. Nell’output di mtr, leggi la colonna della perdita nell’ultima riga. Una perdita su un hop intermedio, ma non sulla destinazione, è normale: i router rispondono ai messaggi ICMP (internet control message protocol) conteggiati da mtr con una priorità bassa, quindi non si tratta di perdita del tuo traffico. Una perdita nell’ultima riga è reale.
Ripeti il test di rete durante l’ora di punta degli utenti. Un singolo campione alle 02:00 descrive una rete poco utilizzata.
Salva tutti e quattro i risultati in un file insieme alla data, quindi esegui nuovamente i test dopo un mese. Un piano che era adeguato il primo giorno e lento alla sesta settimana è un piano il cui host si è saturato. I valori del primo giorno permettono di dimostrarlo invece di limitarsi a supporlo.
Quando un VPS economico è la scelta giusta
Un prezzo basso offre vantaggi concreti e comporta costi concreti. CPU più vecchie, un rapporto di overselling più elevato, storage di rete più lento, supporto self-service e ridondanza ridotta sono i fattori che mantengono basso il prezzo. Valutali in base al carico di lavoro.
Un VPS economico è adatto per un ambiente di sviluppo, un runner CI, un endpoint VPN, un nodo di monitoraggio, una destinazione per i backup o un sito statico. Tutti questi carichi possono tollerare un minuto di lentezza. È invece un compromesso sfavorevole quando la latenza è il prodotto: una pagina di checkout, un'API interattiva, un game server o un database da cui dipende un altro servizio. Il test precedente ti indica quale situazione hai acquistato e te lo mostra quando la risposta non comporta ancora alcun costo.
FAQ
Che cosa significa vCPU in un'offerta VPS economica?
Una vCPU è un processore virtuale presentato al guest e corrisponde a un thread che lo scheduler dell'host esegue su un core fisico quando possibile. È una quota di tempo CPU, non hardware riservato, salvo che l'offerta indichi "dedicated core" o "dedicated vCPU". Gli host vendono più vCPU di quanti core abbiano realmente e questo rapporto viene raramente pubblicato, quindi va misurato. Eseguire stress-ng --cpu 0 --timeout 300s e osservare la colonna st in vmstat 1. Un valore di steal a due cifre indica che il guest è in attesa di core utilizzati da altri guest.
"Unlimited bandwidth" significa davvero illimitata?
No. Il limite si trova generalmente in due punti esterni alla descrizione dell'offerta. La acceptable use policy definisce a parole un limite di fair use, mentre la velocità della porta impone un limite massimo in byte. Una porta a 100 Mbit/s non può trasferire più di circa 32 TB in 30 giorni neppure alla velocità massima. Chiedere quindi la velocità della porta e leggere la policy cercando le espressioni "fair use" e "sustained". Monitorare poi il traffico effettivamente inviato con vnstat -m e confrontarlo con la quota disponibile.
Come posso verificare se il mio VPS usa davvero NVMe?
Non è possibile confermare il supporto fisico dall'interno del guest, perché lsblk riporta soltanto ciò che l'hypervisor dichiara: ROTA pari a 0 e un model string vuoto o generico. È però possibile misurare il comportamento. Eseguire fio con --direct=1 a --iodepth=1 e leggere la latenza di completamento al percentile 99.00. Un NVMe locale risponde nell'ordine delle centinaia di microsecondi, mentre un volume collegato in rete risponde in millisecondi anche quando il throughput sequenziale sembra elevato. Ripetere il test alcune volte durante la giornata, perché un disco condiviso non offre le stesse prestazioni alle 03:00 e alle 20:00.
Che cosa devo testare prima della scadenza della finestra di rimborso?
Quattro aspetti, in questo ordine. Le caratteristiche effettive della macchina, usando systemd-detect-virt, lscpu e free -h. La velocità single-thread, usando sysbench cpu --cpu-max-prime=20000 --threads=1 run. Lo steal time sotto carico completo, usando stress-ng --cpu 0 e monitorandolo con vmstat 1. La latenza del disco, usando fio con queue depth pari a 1. Misurare infine la rete da una macchina vicina ai propri utenti con mtr e scaricando un file pubblicato dalla macchina. Trenta minuti sono sufficienti per completare tutti i test. Eseguirli prima di migrare qualsiasi dato consente di mantenere la finestra di rimborso come leva negoziale.