> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Limiti e restrizioni della piattaforma

> Specifiche tecniche per l'allocazione di RAM/CPU, limiti di rete e di storage su Square Cloud.

Square Cloud implementa limiti di risorse basati su container per garantire isolamento, stabilità e una distribuzione equa dell'infrastruttura tra le applicazioni.

## Requisiti minimi di risorse

Ogni progetto ospitato sulla piattaforma Square Cloud ha requisiti minimi di risorse specifici per garantire prestazioni ottimali:

* **Bot:** Minimo di 256 MB di RAM richiesti.
* **Siti web:** Minimo di 512 MB di RAM richiesti.
* **Database cache:** Minimo di 512 MB di RAM richiesti.
* **Database generali:** Minimo di 1 GB di RAM richiesti.

### Perché esistono i minimi di RAM?

I container hanno un overhead operativo obbligatorio: runtime del linguaggio, librerie del sistema operativo e buffer di rete. Al di sotto di 256 MB, l'OOM Killer del kernel tende a terminare i processi durante il boot o la garbage collection, rendendo l'applicazione inutilizzabile.

**Implicazioni tecniche:**

* Ogni container consuma 1 IPv4 dinamico e IOPS di storage NVMe
* Le allocazioni minime prevengono la frammentazione delle risorse (effetto noisy neighbor)
* Formula degli snapshot giornalieri: `(Total RAM / 256) * 2` (approssimativa; l'allocazione esatta per piano potrebbe essere inferiore sui livelli più alti)

<Note>**Dati sull'impatto:** Dopo aver implementato il limite minimo di 256 MB, la stabilità delle applicazioni è aumentata drasticamente, riducendo il tasso di crash dovuti a OOM (Out of Memory) del **97,7%**.</Note>

## Allocazione della CPU

Risposta breve: la CPU viene allocata in base alla RAM configurata. Aumentare la RAM garantisce tipicamente più vCPU.

### Regole

#### Piani a vCPU singola

Le applicazioni sui piani a 1 vCPU ricevono la piena capacità senza throttling.

#### Piani multicore (≥2 vCPU)

* Soglia minima di prestazioni: le applicazioni con ≥512 MB di RAM ricevono almeno 2 vCPU.
* Scalabilità proporzionale:
  * Hobby (≤2 vCPU): +1 vCPU per 512 MB di RAM
  * Standard / Pro / Enterprise: +1 vCPU per 1 GB (1024 MB) di RAM

### Esempi

| Piano      | Capacità del piano | RAM configurata |    vCPU allocate |
| ---------- | ------------------ | --------------: | ---------------: |
| Standard   | 4 GB / 4 vCPU      |            1 GB |  2 vCPU (minimo) |
| Standard   | 4 GB / 4 vCPU      |            4 GB | 4 vCPU (massimo) |
| Enterprise | 128 GB / 16 vCPU   |            2 GB |           2 vCPU |
| Enterprise | 128 GB / 16 vCPU   |           16 GB |          16 vCPU |

Throttling e limiti di sicurezza

Il sistema applica il limite di vCPU del piano e applica un livellamento per mantenere equa la distribuzione. L'elasticità a breve termine può concedere vCPU aggiuntive durante i picchi, ma non è garantita.

Usi della CPU vietati:

* Mining di criptovalute
* Carichi di lavoro ML intensivi e non limitati senza autorizzazione
* Abuso deliberato delle risorse

Le violazioni comportano lo stato `LACK_OF_CPU` e la sospensione immediata.

## Limiti di rete

La banda scala con la RAM: **+50 Mbps per ogni 256 MB di RAM**.

| RAM allocata |     Banda |
| -----------: | --------: |
|       256 MB |   50 Mbps |
|       512 MB |  100 Mbps |
|         1 GB |  200 Mbps |
|         2 GB |  400 Mbps |
|         4 GB |  800 Mbps |
|         8 GB | 1600 Mbps |
|        10 GB | 2000 Mbps |

Per requisiti superiori a 2000 Mbps contatta il supporto.

## Limiti di storage

Tutti i progetti ricevono per impostazione predefinita **10 GB di storage NVMe**.

Caratteristiche:

* NVMe di livello enterprise
* Persistente attraverso deploy e riavvii
* IOPS e throughput elevati

## Stati di superamento dei limiti

### LACK\_OF\_RAM

Quando: l'applicazione supera la RAM allocata o il kernel segnala un OOM.

Azione: il processo viene terminato immediatamente per proteggere la stabilità dell'host.

Come risolvere:

1. Individua i memory leak con i profiler (Node.js: `--inspect`, Python: `memory_profiler`).
2. Riduci le cache in memoria o spostale su Redis.
3. Aumenta la RAM allocata nel pannello di controllo.

### LACK\_OF\_CPU

Quando: l'utilizzo sostenuto della CPU supera i limiti ragionevoli per l'allocazione.

Azione: processo terminato con stato `LACK_OF_CPU`.

Come risolvere:

1. Profila gli hotspot della CPU (Node.js: `0x`, Python: `cProfile`).
2. Ottimizza i loop critici, le query al DB e le operazioni I/O-bound.
3. Aumenta la RAM per ottenere più vCPU (vedi la tabella di allocazione della CPU).
4. Delega il lavoro pesante a worker asincroni o job batch.

Compromesso: aumentare la RAM per ottenere CPU aumenta i costi. Valuta se l'ottimizzazione del codice sia più economica dello scaling up.
