2013-10-04 43 views
2

在我們的應用程序中,遠程過程調用是使用自己的基於netty的命令調度程序系統解決的。我們有很多模塊(大約20個),我想在單獨的jvm-s中運行所有模塊。我的問題是,RMI爲每個JVM產生大約17個線程。我根本不需要RMI(據我所知)。有沒有辦法在Java應用程序中完全禁用RMI?

我可以完全禁用一個jvm的RMI嗎?或者至少配置它,它不使用這麼多的線程?

+5

如果您不使用RMI,那些線程將不會執行任何操作。這聽起來像是過早的優化。 –

+1

謝謝你的回答。在一臺機器上運行20個jvm時,會有340個未使用的線程。這已經可以在負載上看到。我真的不明白爲什麼RMI需要17(!)個未使用的線程。這是'過早'優化:) – Szobi

+1

@Szobi因此,有340個睡眠線程,它們可以影響你的性能的唯一方法是如果你運行在32位Java之下,並且用完了虛擬地址空間。如果情況並非如此,那麼你認爲這些線索會對你做什麼? – Voo

回答

3

StuartMarks is correct。直到您使用它,RMI纔會啓動任何線程。

可能你正在以某種你不知道的方式使用它,例如, JMX?

4

你很可能用監視應用程序查看你的JVM,對吧?那麼:這些監控應用使用 RMI。因此,您會在監視應用程序,分析器等中看到始終的RMI線程。您將始終使用一定量的CPU時間來查看它們。就像收集分析信息在沒有將這些信息(通過RMI)傳輸到您的工具時無法正常工作一樣。您可以實現自己的傳輸協議並指導管理bean使用它,但我懷疑您可以節省足夠的資源來返回開發成本。

如果您不使用任何RMI,RMI將不會啓動任何線程。但是,如果您正在使用它,即使您沒有意識到這一點,禁用RMI也意味着您的軟件將不再工作。

相關問題