Skip to main content

Limits

Each account is capped on what it can use of the server. The caps are set per account, when it is created and at any time after, in the Limits section of the account's page (Edit) or with account:edit:

elpanctl account:edit <username> --<limit>=<value> [--<limit>=<value>]...

Each option sets one limit and leaves the others alone. The same fields, with the same defaults, are on the Create Account form. A terminated account is frozen: Edit is hidden and account:edit is refused until the account is restored or deleted.

The limits and their defaults​

Limit (admin app)account:edit optionDefaultNotes
Storage limit--disk-quotaunlimited500M, 2G; unlimited or 0 for none.
Process limit--process-limit64How many processes the account can run at once.
Memory limit--memory-limitthe host's sizing profile; 2 GiB on the standard profile512M, 2G; empty in the form for none.
CPU quota (%)--cpu-quota100100 is one core, 200 two cores.
IO weight--io-weight10010 to 1000. A relative weight against the other accounts, not an absolute rate.
Persistent services--enable-persistent-services, --disable-persistent-servicesoffWhether the account's app servers and containers run without a session.
AI cost budget--ai-rate-limitoffEmpty, or disabled, bars the account from the AI features; default gives the panel's default budget.
Outgoing script-mail limit--script-mail-rate-limit100/PT1H/300Always on. Empty, or default, uses the panel's default.
Mailing lists--mailing-list-limit100Or unlimited.
Members per mailing list--mailing-list-member-limit10,000Members whatever their status. Or unlimited.
Mailing list addresses at a time--mailing-list-bulk-add-limit1,0001 to 1000: one Add Members or one API request.
Mailing list message size--mailing-list-message-size10 MB10M; or unlimited, which leaves the mail server's own limit.
Webhook endpoints--webhook-endpoint-limit100 turns webhooks off for the account; or unlimited.
Webhook delivery limit--outbound-rate-limit60/PT1M,2000/PT1HDeliveries over it wait; none is dropped. default, or unlimited.

What the account holder sees of these is in the account docs: Quotas and limits.

Resources​

Storage counts everything in the account's home directory, its mail, its databases and its mailing list archives. The account's page and account:view show the usage against the limit, with the home directory, the databases and the archives apart.

Memory limit, CPU quota, IO weight and Process limit become the account's systemd slice (MemoryMax, CPUQuota, IOWeight and TasksMax), so they cap all of the account's processes together: app servers, containers, cron jobs, PHP and terminal sessions. At the memory or process cap a process fails to start or is stopped. A limit left empty is rendered as a finite value that amounts to the whole machine, because the web server refuses to run an account's PHP under a slice without limits.

The memory default and the sizing profile​

The memory limit is the one default that depends on the server. Before the Sizing profiles, every account got 2 GiB; now a new account gets the profile's default, and 2 GiB is the standard and large profiles' value. Existing accounts keep their limit when the profile changes. To move them:

elpanctl account:apply-memory-default [--dry-run] [--from=<size>] [--all]

Without options it changes only the accounts still at 2 GiB, the old default, on the assumption that nobody set those by hand; --from names another value to move from; --all changes every account whose limit differs from the profile's default, uncapped accounts included. Accounts being deleted are left alone.

Persistent services​

An account's app servers and containers run under the account's own systemd user manager. With Persistent services off, that manager runs only while the account has a session, so nothing of the account's runs on its own. With it on, the panel keeps the manager up (systemd's linger), and the account's app servers and containers start at boot and keep running without anyone signed in.

The AI cost budget​

The account AI assistant spends money per request, so an account may use it only within a budget, in the rate-limiter notation with microdollars as tokens; a new account has none, and none means the assistant is off for the account. account:view shows the budget, how much of it is left and when the window resets. The budget's notation and default, --reset-ai-budget, the LLM proxy and disabling the assistant server-wide are in AI assistant.

Mail sent by scripts​

The Outgoing script-mail limit caps the mail an account's programs hand to sendmail: PHP's mail(), a contact form, a cron job. Such mail has no mailbox sign-in, so the account's scripts and domains share one bucket. The default, 100/PT1H/300, is 100 messages an hour sustained with a burst of 300: generous for application mail, and a cap on a runaway script. Mail over the limit is refused, not queued; the account holder sees it under Sendmail Failures.

This limit is always on. An empty field, or default, means the panel's default, never unlimited. Mail sent from a mailbox is not under it: each mailbox and send-only address has a per-sender submission limit of its own, 1/PT1M/60 by default (one a minute, burst 60), which the account holder sets per address and service:mail:edit --rate-limit sets domain-wide (--enforce-rate-limit makes the domain's value binding).

Mailing lists​

The four mailing list limits bound what one account's lists can do to the server's outgoing mail: how many lists, how many members in each, how many addresses one Add Members (or one API request) can hold, and the largest post a list accepts. A list sends one copy of a post to each member, so a 10 MB post to 1,000 members is 10 GB of mail; that is why a post has its own size limit, under the mail server's. The panel refuses what crosses a limit and tells the holder which one. See Mailing Lists in the account docs.

Webhooks​

The account's webhooks notify the holder's own systems of events in the account. Webhook endpoints caps how many endpoints the account can register; 0 turns the feature off for the account. The Webhook delivery limit paces the deliveries to all of them, in rate-limiter notation: over it, deliveries wait their turn and none is dropped. See Webhooks in the account docs. The server's own outgoing webhooks are a different thing: Webhooks.

The rate-limiter notation​

The AI budget, the script-mail limit and the webhook delivery limit share one notation, with the duration in ISO 8601 (PT1M one minute, PT1H one hour, P7D seven days):

FormPolicyExample
<limit>/<duration>Sliding window: at most this many in any such period.60/PT1M
<limit>/<duration>/<burst>Token bucket: this many per period sustained, up to the burst at once.100/PT1H/300
fixed:<limit>/<duration>Fixed window: the allowance refills when the period ends.fixed:10000/PT24H
several, separated by commasAll of them apply together.60/PT1M,2000/PT1H