Client-Side Rate Limiting
In addition to rate limits on the server-side, the Android SDK also employs client-side rate limiting.
Client-side rate limits in addition to server-side rate limits helps limit a device's overall network usage and bandwidth consumption, by not sending data in the first place. They also further reduce the traffic to Memfault from any single malfunctioning device, and which helps provide fairer pricing.
In general, when any particular error event is detected, the Android SDK will check whether that type of error event has been rate limited, before recording the event to be uploaded. For some error types, the SDK will additionally consider an error event's Signature in the rate limit, by limiting events with unique Signatures and repeated Signatures.
For example, we can use the stacktrace from Java Exceptions as the Signature to uniquely identify exceptions from one another. Java Exceptions are rate limited at a rate of 100 unique Exceptions, 4 repeated Exceptions, every 15 minutes. If we receive 5 Java Exceptions with the same stacktrace, and thus the same Signature, in the same 15 minute period, those 5 Java Exceptions will only count as 1 towards the 100 allowed, and only 4 of those Java Exceptions will be uploaded.
This granularity helps mitigates situations where a single crash in a crashloop prevents all other exceptions from being seen.
Event Type | Default Rate Limit |
---|---|
Bug Report (on device requests) | 3 bug report requests every 30 minutes |
Bug Report (periodic) | 3 periodic bug reports every collection interval |
DropBoxManager ANRs | 10 unique ANRs every 15 minutes |
DropBoxManager Java Exceptions | 100 unique, 4 repeated Exceptions every 15 minutes |
DropBoxManager WTFs | 10 unique, 5 repeated WTFs every day |
DropBoxManager Kmsgs | 10 Kmsgs every 15 minutes |
DropBoxManager Custom Events | 2 Custom Events every hour |
DropBoxManager Tombstones | 10 unique Tombstones every 15 minutes |
Kernel Oops | 3 Kernel Oops every 6 hours |
Reboot Events | 5 Reboot Events every 15 minutes |
SELinux Violations | 15 unique SELinux Violations every day |
To bypass client-side rate limits for development, the Android SDK can be placed in Developer Mode.