Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
Linux RHEL中占用的缓存内存_Linux_Linux Kernel - Fatal编程技术网

Linux RHEL中占用的缓存内存

Linux RHEL中占用的缓存内存,linux,linux-kernel,Linux,Linux Kernel,我在RHEL环境中运行我的应用程序服务器(Karaf、Tomcat、Mongo和Zookeeper各一个实例),经常看到(使用free-m)我的12GB内存中几乎8GM都显示为缓存。应用程序也会变慢。为什么会发生这种情况。我甚至试图优雅地停止所有这些服务,直到我的机器上只运行Linux操作系统。即使这样,缓存也不会被释放。我必须手动释放它才能把它弄下来 为什么缓存是这样累积的,它是否与我的应用程序有关?运行这样的计时作业只是为了释放缓存,这是一种好的做法吗?如果您在这里最后一列谈论“缓存”: $

我在RHEL环境中运行我的应用程序服务器(Karaf、Tomcat、Mongo和Zookeeper各一个实例),经常看到(使用free-m)我的12GB内存中几乎8GM都显示为缓存。应用程序也会变慢。为什么会发生这种情况。我甚至试图优雅地停止所有这些服务,直到我的机器上只运行Linux操作系统。即使这样,缓存也不会被释放。我必须手动释放它才能把它弄下来


为什么缓存是这样累积的,它是否与我的应用程序有关?运行这样的计时作业只是为了释放缓存,这是一种好的做法吗?

如果您在这里最后一列谈论“缓存”:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       3580        374          0          1       1448
那么就没有理由澄清它了。该缓存是绝对无害的,它保留(缓存)例如以前打开的文件,以便更快地访问。当需要更多内存时,此缓存将自动清除。没有理由认为此缓存会减慢任何应用程序的速度

更新:某些应用程序将临时文件存储在内存中,/dev/shm通常是存储临时文件的地方,但您可以使用以下方法在系统上检查这些文件:

$ mount|grep tmpfs

这些文件也会显示在“缓存”列中,但这些数据并不是无害的,因为当需要更多可用内存时,无法删除这些数据。

请尝试清除缓存

#sync; echo 3 > /proc/sys/vm/drop_caches 

free-m给了我以下值:total-7767,used-7638,free-128,shared-0,buffers-2,cached-4949。只有128MB是空闲的,缓存中有将近4.5GB,即使我以root用户身份执行“sync;echo 3>/proc/sys/vm/drop_caches”,它们也不会被清除。但是,如果我停止服务器上运行的某个进程(mongodb),则相同的命令会删除缓存。这意味着什么?我在回复中添加了更多信息。我不熟悉mongodb,但它可能使用临时文件,就像我在更新的回复中所说的那样。如果是这样,您可以尝试在上面命令列出的目录中查找这些文件,并在硬盘分区上重新创建包含临时文件的目录。例如,如果mongodb将其临时文件放在/dev/shm/mongodb中,那么您可以在mongodb停止时将一个小分区装载到该目录中。