linux - 同时运行一个 jar 的多个实例 : memory issue

标签 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打开一个新的screen session 。
  3. 在此屏幕中打开多个窗口。
  4. 在每个窗口中,运行 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/

相关文章:

linux - 以原子方式移动目录

scala - 如何将列转换为向量类型?

java - JVM 如何知道何时抛出 NullPointerException

java - 如何避免使用 Java Flight Recorder 截断堆栈跟踪

c# - 是否可以使用 .net core c# 执行 ps -aux ?

linux - SSH 连接到 ec2 连接超时

linux自动接收所有组播流量

java - Scalatra 独立部署时找不到 View

java - 为什么变量索引与 0x1f 进行两次 AND 运算?

java - 如何找出 JVM 对我的代码应用了哪些优化?