The manual gives a table of machine types from one cloud provider and honestly calls it an estimate: the result is shifted by configuration, hardware, the software set, the network and address reputation. The value lies not in the table but in the two rules below it — they are not tied to any provider.
Memory grows with the number of recipients — about 2 KB for each one waiting in the queue, regardless of message size. A hundred thousand recipients means about two hundred megabytes, however much the message itself weighs.
Space grows with volume — with the total size of the messages. The manual’s example: a hundred thousand recipients at 50 KB each require no less than six gigabytes of spool, and the actual need turns out slightly higher than the sum of the sizes. Accounting and logs are counted separately.
Hence the main consequence. These are two independent resources with independent reasons to grow. A node can be memory-bound with an empty disk — many recipients of light messages — or disk-bound with free memory — heavy messages to a small list. An estimate that treats them as one quantity is bound to be wrong about one of the two.
Throughput reference points, if needed: from four cores and 8 GB for two million 50 KB messages per hour up to sixteen cores and 32 GB for eight million.
The Hub could calculate for a plan, and it has enough data: it knows the node’s resources, and the planned volume and message size too. What is missing is the sending profile — in bursts or steadily, how deep the queue grows during refusals — and without it a plan-based calculation gives a number that is correct only for a calm day.
Count like this:
| Resource | Driven by | How to estimate |
|---|---|---|
| memory | recipients in the queue at the same time | 2 KB per recipient plus headroom for the application itself |
| spool disk | the total size of messages in the queue | message size times the number of recipients, and a bit more |
| disk for accounting and logs | sending volume | counted separately, not part of the spool |
The key word is “at the same time.” The number of recipients in the queue is determined not by daily volume but by how long messages live in it: the bounce deadline, the retry schedule and receiver behavior. A sensible estimate for the worst day is the daily volume multiplied by the bounce deadline in days.
Take headroom not in percent but in multiples. Both resources jump when a receiver has trouble, and that is exactly when the node should least of all be memory-bound.
# a plan-based estimate: 100,000 recipients a day, a 50 KB message # memory: 100,000 × 2 KB ≈ 200 MB — with calm sending # × 4 (4-day bounce deadline) ≈ 800 MB — when a receiver stalls# spool: 100,000 × 50 KB ≈ 5 GB — and a bit more in practice # accounting and logs are counted separately
what people get wrong and how it ends3 mistakes▶
§ 1.7.1.2
§ 1.7.1.2
§ 1.7.1.2
2 relations
Deployment in the cloudThe mechanism this step relies on. § 1.7.1.1What makes a virtual machine riskyA related mechanism: they work together. § 1.7.1.2A fake receiver inside the node itselfThe capacity calculations from the first chapter are estimates; this is a way to get a real figure on your own hardware. inferencetotal-max-smtp-outGlobalThe number of connections spends memory and descriptors, and that is exactly what the sizing estimate counts. inferencespool-max-recipientsGlobalThe ceiling is one of the two headroom boundaries; the other is memory. § 1.7.1.2min-free-space<spool>The threshold is part of the headroom calculation: how much space must remain once receiving has already stopped. § 1.7.1.2
pmta show status df -h /var/spool/pmta && free -m
3 articles
◇The activation key is a prerequisite for installation, not a step after itWithout an activation key from SparkPost support the engine neither installs nor runs, and the license tier sets the outbound connection ceiling: on Standard everything above 200 is ignored.◇Cloud restrictionsClouds restrict outbound mail on port 25 until you ask them to lift the limit, and mailbox providers treat their address ranges with suspicion.◇A license for a fleet, not for a serverThe license is not bound to a server: it is installed on as many machines as the instance limit allows, and the nodes send volume statistics to the vendor every hour.