Agent keeps large binary memory despite no state

First, why is that a problem? System does not guarantee that it triggers a garbage collection right after responding to a control message. This data will be eventually garbage collected and system decides when it happens. You won’t run out of memory

Second, have you tried using ets table? You can just clear the table while reading from it with select_delete