Troubleshooting
This page covers the common operator-facing problems and what they mean in RayLimit terms.
tc Is Missing
Typical signal:
exec: "tc": executable file not foundtc state inspection failed
Install the Linux tc userspace tool and verify it is in PATH.
Runtime Selection Does Not Match
If inspect or limit cannot find the target:
sudo raylimit discover
sudo raylimit inspect --pid 1234Make sure the runtime is still present and that the selector matches the current host view.
Runtime Selection Is Ambiguous
If inspect reports multiple matches:
- refine the selection with
--pid,--container,--name, or--source - or use
--allfor inspection only
limit requires one concrete runtime target. It does not act on multiple runtimes at once.
Execution Is Blocked
Blocked execution usually means one of these:
- the runtime evidence is too weak
- selector derivation is unreadable or ambiguous
- the backend path is not concrete for the selected family
- current state is not comparable enough for safe live mutation
Read the observation and decision sections before changing the command. Blocked execution is a safety result, not a generic crash.
--unlimited Validation Fails
--unlimited works only with a specific IP target:
sudo raylimit limit --pid 1234 --ip 203.0.113.20 --device eth0 --direction upload --unlimitedIt does not work with:
--ip all--rate--remove--inbound--outbound
Shared All-IP Baseline Does Not Behave Like Host-Global State
That is expected. --ip all in its default shared mode is runtime-local. If another runtime still has unshaped traffic, that does not mean the shared baseline failed. It means the other runtime is outside the selected subject.
per_ip Has No Concrete Work
When --ip all --ip-aggregation per_ip does not produce concrete per-IP work, the report is usually telling you one of these:
- live client IP evidence is unavailable or insufficient, so planning is blocked and execution is refused
- the runtime currently has
no_sessions, so there is no concrete per-IP work to apply or remove - live evidence was available, but no usable client IPs remained after normalization
Read the per-IP evidence state and per-IP reconcile state before changing the command. per_ip depends on the current live client IP set. It does not guess unseen clients and it does not fall back silently to the shared baseline.
Remove Does Less Than Expected
Remove is conservative by design. RayLimit removes only the managed state it can attribute to the selected subject. A no-op remove can still be the correct result.
For IP in particular:
- removing a specific IP does not remove the shared baseline
- removing the shared baseline does not imply removal of every specific IP rule on other subjects
A Repeated Command Does Not Execute Again
That can be correct. If the observed state already matches the desired state, RayLimit can return no_op instead of executing a second time.
Inbound Or Outbound Stay Non-Concrete
That usually points to runtime configuration evidence:
- unreadable configuration
- wildcard or ambiguous inbound listener state
- shared or zero outbound marks
- proxy or dialer-proxy indirection
Those paths need cleaner runtime evidence before live execution becomes safe.