问题描述
在启动容器的时候报错
Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8329887744 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid174.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005cf800000, 8329887744, 0) failed; error='Not enough space' (errno=12)
at org.elasticsearch.tools.launchers.JvmOption.flagsFinal(JvmOption.java:119)
at org.elasticsearch.tools.launchers.JvmOption.findFinalOptions(JvmOption.java:81)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:38)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:135)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
根据提示得知:内存不足了!
查看缓存
查看缓存的使用情况
free -h
可以看到系统的缓存使用情况
total used free shared buff/cache available
Mem: 15G 11G 471M 896M 3.9G 3.2G
Swap: 0B 0B 0B
free从/proc/meninfo收集到以下信息:
Men:内存的使用情况
Swap:交换空间的使用情况
total:总内存
used:已经使用的内存
shared:共享内存(主要被tmpfs使用的内存)
buff/cache:buff和cache的和
available:启动新进程时可用的内存
解读:
buffer 在操作系统中指 buffer cache, 中文一般翻译为 "缓冲区"。
cache 在操作系统中指 page cache,中文一般翻译为 "页高速缓存"。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。
free 是真正尚未被使用的物理内存数量。
available 是从应用程序的角度看到的可用内存数量。
当centos频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。
清理缓存
sync
操作系统在运行过程中,会把访问到的文件放到buffer中。为了避免断电,等故障造成数据丢失,我们需要把buffer中的缓存数据写入到磁盘。
手动执行sync命令
> sync
手动释放内存的命令
每个 Linux 系统有三种选项来清除缓存而不需要中断任何进程或服务。
. /proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。
> echo 3>/proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:仅清除页面缓存(PageCache)
2:清除目录项和inode
3:清除页面缓存,目录项和inode
再次查看内存情况
[root@ecs-410441-0001 ~]# free -h
total used free shared buff/cache available
Mem: 15G 11G 2.2G 896M 2.1G 3.1G
Swap: 0B 0B 0B
恢复默认设置
> echo 0>/proc/sys/vm/drop_caches