现在,我在具有 24 个内核和 64G 内存的集群上同时运行多个 jar 实例(用 scala 编写的代码)Ubuntu 11.04 (GNU/Linux 2.6.38-15-generic x86_64)
,. 我观察到内存使用量过大的问题,这与我运行的实例数量呈超线性关系。更具体地说,这就是我正在做的事情
- 在 scala 中编写代码并使用 sbt 打包到 jar 中。
- 登录集群,用于
screen
打开一个新的屏幕会话。 - 在此屏幕中打开多个窗口。
- 在每个窗口中,运行
java -cp myjar.jar main.scala.MyClass
我观察到的是,假设我只运行 7 个实例时,使用了大约 10G 内存,一切都很好。现在我运行 14 个实例。内存很快就被吃光了,64G都被占满了,然后机器急剧变慢,甚至登录都很难。通过监控机器htop
,我可以看到一次只有几个核心在运行。谁能告诉我我的程序发生了什么以及如何修复它以便我能够有效地使用计算资源?谢谢!