2013-03-25 100 views
0

現在我有24個核心和64G存儲集羣上運行,同時罐(Scala編寫的代碼)的多個實例,以Ubuntu 11.04 (GNU/Linux 2.6.38-15-generic x86_64)。我觀察到內存使用率過高的問題,這對我運行的實例數量而言是超線性的。更具體地說,這是我在做什麼運行多個實例:內存問題

  1. scala中的代碼和使用sbt打包成一個罐子。
  2. 登錄羣集,使用screen打開新的屏幕會話。
  3. 在此屏幕中打開多個窗口。
  4. 在每個窗口中運行java -cp myjar.jar main.scala.MyClass

我看到那是什麼,說什麼時候我只能跑7分的情況下,約10G內存使用,一切都很好。現在我運行了14個實例。內存很快被吃掉,所有64G都被佔用,然後機器急劇減速,甚至難以登錄。通過htop監控機器,我可以看到一次只能運行幾個內核。任何人都可以告訴我我的程序發生了什麼,以及如何修復它,以便我能夠有效地使用計算資源?謝謝!

+0

不幸的是,我不能告訴ÿ ou超線性內存消耗來自哪裏。當你開始14而不是10時,你的罐子有不同的表現嗎?你在你的程序實例之間使用IPC還是一些通信? – corny 2013-03-26 08:06:40

回答

1

爲了有效地使用計算資源,你就必須開始一個jar這將啓動多個線程在一個JVM。如果啓動14個相同的jar實例,則會運行14個獨立的JVM。

+0

當然,我也看到了這個解決方案。但是,如果我的每個線程都需要大量內存,並且1個JVM無法承擔總內存需求,那麼這會是一個問題嗎?或者在這種情況下,我只需要增加分配給JVM的內存量(堆/堆棧或其他) – Kane 2013-03-27 15:00:58

0

如果解決這個問題後,你完全愛這些貝殼一樣的工具(像我一樣)經過的java troubleshooting tools完整列表 - 它會爲你節省大量的時間,所以你可以去酒館前面,而不是待到很晚和調試內存/ CPU的問題