同时运行jar的多个实例:内存问题

时间:2013-03-25 20:45:00

标签: linux scala jvm

现在我在具有24个内核和64G内存的群集上同时运行jar的多个实例(用scala编写的代码),Ubuntu 11.04 (GNU/Linux 2.6.38-15-generic x86_64)。我观察到大量内存使用的问题,这与我运行的实例数量是超线性的。更具体地说,这就是我正在做的事情

  1. scala中的代码并使用sbt打包到jar中。
  2. 登录群集,使用screen打开新的屏幕会话。
  3. 在此屏幕中打开多个窗口。
  4. 在每个窗口中,运行java -cp myjar.jar main.scala.MyClass
  5. 我观察到的是,当我只运行7个实例时,使用大约10G内存,一切都很好。现在我运行了14个实例。内存很快被占用,所有64G都被占用,然后机器显着减速甚至很难登录。通过htop监控机器,我可以看到只有少数内核正在运行时间。任何人都可以告诉我我的程序发生了什么以及如何解决它,以便我能够有效地使用计算资源?谢谢!

2 个答案:

答案 0 :(得分:1)

要有效地使用计算资源,您必须启动一个jar,它在一个JVM中启动多个线程。如果启动相同jar的14个实例,则会运行14个隔离的JVM。

答案 1 :(得分:0)

如果在解决了这个问题之后,你完全喜欢这些类似shell的工具(就像我一样),请查看完整的java troubleshooting tools列表 - 它会为你节省很多时间,所以你可以提前去酒吧而不是迟到和调试内存/ CPU问题