Я думаю, вы не понимаете, для чего предназначен setMemoryLoad.
SetMemoryLoad и аналогичные методы (например, setCPULoad) не определяют, сколько памяти или ЦП фактически выделено для компонента. Это подсказки для планировщика с поддержкой ресурсов https://storm.apache.org/releases/2.0.0-SNAPSHOT/Resource_Aware_Scheduler_overview.html.
Вы настраиваете, сколько памяти / процессора доступно на каждом супервизоре, и планировщик, учитывающий ресурсы, использует эту информацию вместе с нагрузками памяти / процессора, которые вы устанавливаете на свои компоненты, чтобы попытаться распределить ваши компоненты по вашим супервизорам таким образом, чтобы в этом есть смысл. Вы можете захотеть этого, например, если Вы хотите равномерно распределить тяжелые компоненты по кластеру или если ваши супервизоры неоднородны (то есть у вас есть несколько слабых машин и несколько сильных машин, и вы не хотите, чтобы Storm запускал очень загруженные компоненты на слабых машинах).
Я полагаю, что у Storm есть возможность принудительно установить указанный вами предел ЦП / памяти, но вы должны включить cgroups для этого http://storm.apache.org/releases/2.0.0-SNAPSHOT/cgroups_in_storm.html. Я не очень знаком с этой частью кода, но он позволяет установить либо фиксированный лимит для каждой рабочей JVM, либо попытаться установить динамический лимит на основе назначения планировщика с учетом ресурсов.
Как я уже сказал, я не знаком с поддержкой cgroups, поэтому это может быть неправильно, но я думаю, что Storm может установить предел cgroup для рабочей JVM при загрузке этой JVM. Так, например, если RAS назначит вашему экземпляру один экземпляр boltA и один экземпляр boltB, суммарный лимит всего рабочего будет всего 512 + 1024 мегабайта.