私はAKKAドキュメントのサンプルクラスタアプリケーションの1つをプロファイリング(visualvm)していました。ガベージコレクションでは、すべてのGCでリクエストアクターをクリーンアップしています。使用後に明示的に俳優を殺すという推奨を完全に理解できません。私のアクターシステムとアクターはSPRING IOCコンテナーによって管理され、私はアクターを作成するために春の拡張機能の直接アクタープロデューサーを使用します。 "アグリゲーター"アクターはすべてのGCでガベージコレクションされています。私は、ビジュアルVMのインスタンス数を監視しました。
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class StatsService extends AbstractActor {
private final LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
@Autowired
private ActorSystem actorSystem;
private ActorRef workerRouter;
@Override
public void preStart() throws Exception {
System.out.println("Creating Router" + this.getClass().getCanonicalName());
workerRouter = getContext().actorOf(SPRING_PRO.get(actorSystem)
.props("statsWorker").withRouter(new FromConfig()), "workerRouter");
super.preStart();
}
@Override
public Receive createReceive() {
return receiveBuilder()
.match(StatsJob.class, job -> !job.getText().isEmpty(), job -> {
final String[] words = job.getText().split(" ");
final ActorRef replyTo = sender();
final ActorRef aggregator = getContext().actorOf(SPRING_PRO.get(actorSystem)
.props("statsAggregator", words.length, replyTo));
for (final String word : words) {
workerRouter.tell(new ConsistentHashableEnvelope(word, word),
aggregator);
}
})
.build();
}
}
http:// stackoverflow。com/questions/23066264/can-wrapping-akka-actor-in-class-actor-起因メモリリーク< - 関連の質問 –