Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么操作系统说它可以';当jvm有足够的内存时,不要将内存分配给它_Java_Linux_Memory_Operating System_Jvm - Fatal编程技术网

Java 为什么操作系统说它可以';当jvm有足够的内存时,不要将内存分配给它

Java 为什么操作系统说它可以';当jvm有足够的内存时,不要将内存分配给它,java,linux,memory,operating-system,jvm,Java,Linux,Memory,Operating System,Jvm,我试图用命令启动一个新的jvm:java-version,但它报告了一个错误: #内存不足,Java运行时环境无法继续。 #本机内存分配(malloc)无法为AllocateHeap分配160088字节 #包含详细信息的错误报告文件另存为: #/users/xxx/xxx/hs_err_pid12365.log 然后我检查了文件/users/xxx/xxx/hs_err_pid12365.log,发现它说: #本机内存分配(malloc)无法为Chunk::new分配295856字节 堆栈信

我试图用命令启动一个新的jvm:
java-version
,但它报告了一个错误:

#内存不足,Java运行时环境无法继续。
#本机内存分配(malloc)无法为AllocateHeap分配160088字节
#包含详细信息的错误报告文件另存为:
#/users/xxx/xxx/hs_err_pid12365.log
然后我检查了文件
/users/xxx/xxx/hs_err_pid12365.log
,发现它说:

#本机内存分配(malloc)无法为Chunk::new分配295856字节
堆栈信息还证明系统无法分配本机内存:

V[libjvm.so+0xad3525]VMError::report_and_die()+0x2e5
V[libjvm.so+0x4e0457]报告内存不足(字符常量*,int,无符号长,VMErrorType,字符常量*)+0x67
V[libjvm.so+0xa9775f]universe_init()+0x35f
V[libjvm.so+0x631fd0]init_globals()+0x50
V[libjvm.so+0xa79b69]线程::create_vm(JavaVMInitArgs*,bool*)+0x409
V[libjvm.so+0x6d7b4f]JNI_CreateJavaVM+0x4f
C[libjli.so+0x7ee4]JavaMain+0x84
C[libpthread.so.0+0x68ca]开始线程+0xba
但是当我使用
free-m
检查可用内存大小时。我发现系统仍然有足够的可用内存:

scada1:/users/xxx/xxx>free-m
缓存的可用共享缓冲区总数
成员:79834867311601101031
-/+缓冲区/高速缓存:3726 4257
掉期:152577115186
那么,当系统有足够的可用内存时,为什么不能分配内存呢

-------系统信息---------

操作系统信息为:

scada1:/users/ems>uname-a
Linux scada1 2.6.32-5-linx-amd64#1 SMP周一5月18日04:02:09 UTC 2015 x86_64 GNU/Linux
java版本为:

jdk1.8.0_201
-------hs_err_pidxxx.log内容---------

#
#内存不足,Java运行时环境无法继续。
#本机内存分配(malloc)无法为AllocateHeap分配160088字节
#可能的原因:
#系统的物理RAM或交换空间不足
#进程在启用CompressedOops的情况下运行,Java堆可能会阻止本机堆的增长
#可能的解决办法:
#减少系统上的内存负载
#增加物理内存或交换空间
#检查交换备份存储是否已满
#减少Java堆大小(-Xmx/-Xms)
#减少Java线程的数量
#减少Java线程堆栈大小(-Xss)
#使用-XX:ReservedCodeCacheSize设置较大的代码缓存=
#JVM以无标度压缩Oops模式运行,Java堆在该模式下运行
#放置在第一个4GB地址空间中。Java堆基址是
#本机堆增长的最大限制。请使用-XX:HeapBaseMAddress
#设置Java堆基础并将Java堆置于4GB虚拟地址之上。
#此输出文件可能被截断或不完整。
#
#内存不足错误(allocation.inline.hpp:61),pid=1348,tid=0x00007f7f87350700
#
#JRE版本:(8.0_201-b09)(内部版本)
#Java虚拟机:Java热点(TM)64位服务器虚拟机(25.201-b09混合模式linux-amd64压缩oops)
#核心转储已写入。默认位置:/users/ems/zoutairan/core或core.1348(最大大小521000 kB)。要确保完整的内核转储,请在再次启动Java之前尝试“ulimit-c unlimited”
#
---------------R E A D---------------
当前线程(0x000000000107e000):JavaThread“Unknown thread”[\u vm中的线程,id=1349,堆栈(0x00007f7f87250000,0x00007F7F7F87351000)]
堆栈:[0x00007f7f87250000,0x00007f7f87351000],sp=0x00007f7f8734f910,可用空间=1022k
本机框架:(J=编译的Java代码,J=解释的,Vv=虚拟机代码,C=本机代码)
V[libjvm.so+0xad3525]VMError::report_and_die()+0x2e5
V[libjvm.so+0x4e0457]报告内存不足(字符常量*,int,无符号长,VMErrorType,字符常量*)+0x67
V[libjvm.so+0xa9775f]universe_init()+0x35f
V[libjvm.so+0x631fd0]init_globals()+0x50
V[libjvm.so+0xa79b69]线程::create_vm(JavaVMInitArgs*,bool*)+0x409
V[libjvm.so+0x6d7b4f]JNI_CreateJavaVM+0x4f
C[libjli.so+0x7ee4]JavaMain+0x84
C[libpthread.so.0+0x68ca]开始线程+0xba
---------------P R O C E S---------------
Java线程:(=>当前线程)
其他线程:
=>0x000000000107e000(已退出)JavaThread“未知线程”[\u虚拟机中的线程,id=1349,堆栈(0x00007f7f87250000,0x00007f7f87351000)]
VM状态:不在安全点(未完全初始化)
当前由线程拥有的VM互斥体/监视器:无
堆地址:0x0000000083400000,大小:1996 MB,压缩Oops模式:32位
窄klass基:0x000000000000000,窄klass移位:3
压缩类空间大小:1073741824地址:0x0000000100000000
GC堆历史记录(0个事件):
无事件
取消优化事件(0个事件):
无事件
重新定义的类(0个事件):
无事件
内部异常(0个事件):
无事件
事件(0个事件):
无事件
动态库:
00400000-00401000 r-xp 00000000 ca:06 16598510/usr/java/jdk1.8.0_201/bin/java
00600000-00601000 r--p 00000000 ca:06 16598510/usr/java/jdk1.8.0_201/bin/java
00601000-00602000 rw-p 00001000 ca:06 16598510/usr/java/jdk1.8.0_201/bin/java
01060000-010b8000 rw-p 00000000:00 0[堆]
83400000-88800000 rw-p 00000000:00
88800000-D670000---p 00000000:00
D670000-d9100000 rw-p 00000000:00
d9100000-140000000---p 00000000:00
7f7f6fc38000-7F7F7070438000---p 00000000:00
7F7F7043800-7f7f7467e000 rw-p 00000000:00
7f7f7467e000-7f7f7467f000---p 00000000:00
7f7f7467f000-7F7F777F000 rw-p 00000000:00
7F7F747F000-7f7f74780000---p 00000000:00
7f7f74780000-7F747480000 rw-p 00000000:00
7f7f74880000-7F7F7474881000---p 00000000:00
7f7f74881000-7f7f74
vm.overcommit_memory = 2
CommitLimit:    15951192 kB
Committed_AS:   15837036 kB
sudo sysctl vm.overcommit_memory=0
sudo sysctl vm.overcommit_ratio=100