Red Hat Enterprise Linux Serverリリース6.5(Santiago)でプロセスを開始しようとしていますが、十分なメモリを割り当てることができないため失敗しています。
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
問題はJavaアプリケーション自体にはありません-単に実行しただけでもエラーが発生します。
Javaバージョン
メモリ消費量を見る:
無料-m
total used free shared buffers cached
Mem: 32069 31276 792 0 556 16948
-/+ buffers/cache: 13771 18297
Swap: 9325 38 9287
そのため、Memは32 Gbのメモリのうち31が使用されていると報告していますが、キャッシュによって使用されている利用可能なメモリは18 Gbあるはずです。プロセスがメモリを要求するとき、OSはこれの一部を解放してはいけませんか?
エラーダンプの詳細は
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (gcTaskThread.cpp:46), pid=40816, tid=140071992215296
#
# JRE version: 6.0_26-b03
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.1-b02 mixed mode linux-AMD64 compressed oops)
--------------- T H R E A D ---------------
Current thread (0x00007f6508006800): JavaThread "Unknown thread" [_thread_in_vm, id=40817, stack(0x00007f650d46c000,0x00007f650d56d000)]
Stack: [0x00007f650d46c000,0x00007f650d56d000], sp=0x00007f650d56b7c0, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x85ebd5] VMError::report_and_die()+0x265
V [libjvm.so+0x3e41b8] report_vm_out_of_memory(char const*, int, unsigned long, char const*)+0x68
V [libjvm.so+0x466ada] GCTaskThread::GCTaskThread(GCTaskManager*, unsigned, unsigned)+0x13a
V [libjvm.so+0x4655de] GCTaskManager::initialize()+0x21e
V [libjvm.so+0x465373] GCTaskManager::GCTaskManager(unsigned)+0x13
V [libjvm.so+0x722cad] ParallelScavengeHeap::initialize()+0x4dd
V [libjvm.so+0x836549] Universe::initialize_heap()+0xa9
V [libjvm.so+0x8360ea] universe_init()+0x7a
V [libjvm.so+0x4ac53b] init_globals()+0x4b
V [libjvm.so+0x81cc74] Threads::create_vm(JavaVMInitArgs*, bool*)+0x214
V [libjvm.so+0x51a7b0] JNI_CreateJavaVM+0x80
Jvm min max memoryを確認してください。Webサーバーを使用していますか?トレッドの数、メモリの設定を調べてください。Tomcatの場合、それらのほとんどは@ server.xmlです。 Java Mission Control http://www.Oracle.com/technetwork/Java/javaseproducts/mission-control/Java-mission-control-1998576.html 詳細な洞察を得るために。Linuxは通常、要求されたときに準備するためにより多くのメモリを保持します。Javaの場合、JMCのようなものだけが何が起こっているのかを理解するのに役立ちます。標準を見てください。 JVMからの出力。
問題はメモリとは関係ありませんが、プロセスの制限と関係があるようです。私がプロセスを実行しているユーザーは、非常に低いプロセス制限が1024に設定されていました。
ulimit -u 1024
そして、このユーザーが実行するすべてのプロセスのスレッド数はそれに近いです:
ps -eLf | grep 'myuser' | wc -l 1022