使用PowerShell远程运行Java

当我在远程会话( etsn {servername} )中运行PowerShell时,我有时似乎无法运行Java进程,即使是最简单的:

 [chi-queuing]: PS C:\temp> java -cp .\hello.jar Hello Error occurred during initialization of VM Could not reserve enough space for object heap 

Hello.jar是一个“Hello,world!” 应该只打印“Hello”到标准输出的应用程序。

所以,问题是,在PowerShell会话的另一端运行流程有什么特别之处吗? 有关Java VM如何工作的特殊内容可能不允许这样的处理吗? 内存是在远程计算机上分配的,对吧? 以下是可用物理内存的读数:

 [chi-queuing]: PS C:\temp> $mem = Get-wmiobject -class Win32_OperatingSystem [chi-queuing]: PS C:\temp> $mem.FreePhysicalMemory 1013000 

但是,当我远程桌面到服务器并询问操作系统有多少可用内存时,它说270 MB物理内存可用。 让我知道你的想法!

根据这个: http : //msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx

MaxMemoryPerShellMB指定每个shell分配的最大内存量,包括shell的子进程。 默认值为150 MB

增加每个Shell MB的最大内存

 winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="1000"}' 

我有不同的答案与你们分享。 我发现自己处于相同的情况,并且增加Java.exe或使用winrm的内存最小值/最大值并没有解决我的问题。

我比较了两台服务器:一台工作,一台不工作。

我使用此链接https://technet.microsoft.com/en-us/library/ff520073%28v=ws.10%29.aspx来检查运行WINRS和远程PowerShell所需的Windows Management Foundation。

结果:两台服务器都运行Windows Server 2008 R2。 一台运行WMF 2.0的服务器,一台运行WMF 3.0。

令我惊讶的是,运行2.0的服务器正在运行,而运行3.0的服务器则没有!

我的解决方案:我将3.0 WMF升级到4.0!

只是一个假设:我们遇到了相同的症状,并根据其他两个答案进行了无休止的调查。 我们的实际解决方案是将jdk1.8.0_31更改为jdk1.8.0_51。