旧的专有 Java 应用程序在多个核心上崩溃

旧的专有 Java 应用程序在多个核心上崩溃

我必须在虚拟机内的最新 Debian 系统上使用 StarTeam 2005 CrossPlatform Client。如果虚拟机配置为单核,则此方法可行。但如果我配置了多个处理器和/或多个核心,则应用程序在启动时会冻结,仅显示启动画面。控制台上不显示任何错误跟踪。

有没有一种解决方法可以让这些应用程序在多核环境中启动并运行?目前,如果我想登录或使用单核设置,我要么必须重新启动。我使用这个虚拟机进行开发,它make -j8比普通的虚拟机更有趣make;)

我试图破解启动脚本的调用schedtool -a 0x1 -v -e java ...(将处理器亲和性设置为 1),但没有成功 - 行为相同。

同样的情况也发生在较旧的设置上(较旧的 VM、较旧的 Linux、相同的 StarTeam),但我没有这些的版本号。以下是当前系统的设置:

  • VMWare Workstation 9.0.3 build-1410761,已安装来宾添加程序
  • Debian Wheezy(Linux cmd-vm 3.2.0-4-686-pae #1 SMP Debian 3.2.46-1+deb7u1 i686 GNU/Linux)
  • Java(TM) SE 运行时环境(版本 1.7.0_25-b15)
  • 启动脚本:LAXUNIX.SH - LaunchAnywhere (tm) 版本 5.0
  • StarTeam 跨平台客户端版本 7.0.0-133

答案1

如上所述,限制 CPU 核心数量还不够。我不得不使用以下方法cpulimit来降低此程序的 CPU 使用率:

在调用 java 之后,我直接在启动脚本中添加了这一行:

cpulimit -e java -l 25 -b

这会将 Java 限制为一个 CPU/核心的最大速度的 25%。限制 CPU 的数量(-c选项不是必需的)。可能只是程序初始化中的竞争条件。

相关内容