现在我在一个 24 核和 64G 内存的集群上同时运行一个 jar 的多个实例(用 scala 编写的代码),Ubuntu 11.04 (GNU/Linux 2.6.38-15-generic x86_64)
。我观察到内存使用量过大的问题,这与我运行的实例数呈超线性关系。更具体地说,这就是我正在做的事情
- 在 scala 中编写代码并使用 sbt 打包到一个 jar 中。
- 登录集群,使用
screen
打开一个新的screen session 。 - 在此屏幕中打开多个窗口。
- 在每个窗口中,运行
java -cp myjar.jar main.scala.MyClass
我观察到的是,当我只运行 7 个实例时,使用了大约 10G 内存,一切都很好。现在我运行 14 个实例。内存很快被吃光,64G都被占用,然后机器速度急剧下降,甚至连登录都困难。通过htop
监控机器,可以看到只有几个核心在一次运行。谁能告诉我我的程序发生了什么以及如何修复它以便我能够有效地使用计算资源?谢谢!
最佳答案
要有效地使用计算资源,您必须启动一个 jar
,它会在一个 JVM 中启动多个线程。如果启动同一个 jar
的 14 个实例,则有 14 个独立的 JVM 正在运行。
关于linux - 同时运行一个 jar 的多个实例 : memory issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15624414/