清理系统centos下缓存并释放内存

问题描述

在启动容器的时候报错

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
posted @ 2024-03-25 15:24  leepandar  阅读(418)  评论(0编辑  收藏  举报