当我在远程会话(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”到standard output。
所以,问题是,在PowerShell会话的另一端运行进程有什么特别之处吗?关于Java VM如何工作可能不允许这样的处理吗?内存是在远程计算机上分配的,对吧?以下是可用物理内存的读数:
[chi-queuing]: PS C:\temp> $mem = Get-wmiobject -class Win32_OperatingSystem
[chi-queuing]: PS C:\temp> $mem.FreePhysicalMemory
1013000
但是,当我远程桌面到服务器并询问操作系统有多少可用内存时,它说270 MB物理内存可用。让我知道你的想法!
答案 0 :(得分:11)
根据这个: http://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx
<强> MaxMemoryPerShellMB 强> 指定每个shell分配的最大内存量,包括shell的子进程。默认值为 150 MB 。
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="1000"}'
答案 1 :(得分:0)
我有不同的答案与你们分享。我发现自己处于相同的情况,并且增加了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!
答案 2 :(得分:0)
只是一个假设:我们遇到了相同的症状,并根据其他两个答案进行了无休止的调查。 我们的实际解决方案是将jdk1.8.0_31更改为jdk1.8.0_51。