私ライブCDLinuxディストリビューションでメモリ不足例外が発生しました。
>java -version
#Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000646e00000, 264241152, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 264241152 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid50274.log
free -m
コマンドを実行すると、〜250Mbの空きRAMとキャッシュに使用された19GBが表示されます。
>free -m
total used free shared buffers cached
Mem: 24128 23827 301 0 15 18929
-/+ buffers/cache: 4881 19247
Swap: 0 0 0
メモリダンプは次のとおりです。
--------------- S Y S T E M ---------------
OS:RapidLinux 20151103
uname:Linux 3.18.22 #1 SMP Fri Oct 9 19:28:11 UTC 2015 x86_64
libc:glibc 2.21 NPTL 2.21
rlimit: STACK 8192k, CORE infinity, NPROC 96487, NOFILE 4096, AS infinity
load average:2.08 1.73 1.30
/proc/meminfo:
MemTotal: 24708040 kB
MemFree: 307572 kB
MemAvailable: 173696 kB
Buffers: 15612 kB
Cached: 19383916 kB
SwapCached: 0 kB
Active: 3784768 kB
Inactive: 19327244 kB
Active(anon): 3742084 kB
Inactive(anon): 19303520 kB
Active(file): 42684 kB
Inactive(file): 23724 kB
Unevictable: 15016 kB
Mlocked: 15016 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 96 kB
Writeback: 0 kB
AnonPages: 3727472 kB
Mapped: 55972 kB
Shmem: 19327344 kB
Slab: 671580 kB
SReclaimable: 116376 kB
SUnreclaim: 555204 kB
KernelStack: 23664 kB
PageTables: 24588 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 12354020 kB
Committed_AS: 28666748 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 738156 kB
VmallocChunk: 34346400260 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
DirectMap4k: 11748 kB
DirectMap2M: 2072576 kB
DirectMap1G: 23068672 kB
Memory: 4k page, physical 24708040k(307572k free), swap 0k(0k free)
完全性チェックを実行してキャッシュを消去しようとしましたが、驚くべきことにキャッシュはまったくsync ; echo 3 | sudo tee /proc/sys/vm/drop_caches
ダウンしていませんでしたが、コマンドは正常に完了しました。
RAMに存在する必要があるaufs /から古いログを削除してキャッシュを消去するコマンドを実行しましたが、まだ何もありません。
残りのファイルシステムは約9GBしか占めません。キャッシュを強制的に消去する方法は?
答え1
プログラムで使用できる空きRAMは19GBです。ディスクキャッシュを消去する必要はありません。システムが他の目的(プログラムの実行など)のためにメモリを必要とする場合、システムはそれを回復します。ディスクキャッシュを消去することができる唯一のことは、コンピュータの速度を遅くすることです。
ディスク容量は重要ではありません。ファイルを削除しても役に立ちません。
19GBのRAMがありますが、プログラムは26MBを割り当てることができないと主張します。計算してみてください:26MB < 19GB。これは、メモリの割り当て方法とエラーの報告方法の両方でプログラムのバグです。/tmp/hs_err_pid50274.log
もっと手がかりがあることを確認してください。
答え2
Shmem: 19327344 kB
tmpfs
19GBまたは他の共有メモリオブジェクトがあります。
これはしばしばありますtmpfs
。確認してくださいdf -h -t tmpfs
。
System V共有メモリーを介して表示できますipcs -m
。
をスキャンすると、一部(すべてではない)別の共有メモリが見つかります/proc
。私の答えには小さなPythonスクリプトがあります。GEMバッファに割り当てられたメモリ量を確認できますか?
編集:あなたの場合、削除されたファイルを開くことがあるかもしれません。これは、スペース使用量が表示されているがdf
表示されないことを意味しますdu
。削除したファイルを検索することができます/proc/
。これには便利なスクリプトはありませんが、そうし、ls -lR /proc | less
コマンドを使用して文字列を取得できます。一部のプロセスによって削除されたログファイルがまだ開いていることがわかるようです。(deleted)
/
less