首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存和交换内存的Linux (RHEL)问题

缓存和交换内存的Linux (RHEL)问题
EN

Unix & Linux用户
提问于 2019-12-08 10:40:39
回答 1查看 199关注 0票数 0

我在linux缓存和交换内存方面有问题。我知道linux正在优化从磁盘读取数据(在RAM中缓冲数据),但在我的例子中,内存的这一部分似乎导致应用程序使用交换空间,因此应用程序的工作速度非常慢(我的问题是在那个linux上运行java服务器)。这是输出:

代码语言:javascript
复制
[glassfish@pahod001 logs]$ free -m
             total       used       free     shared    buffers     cached
Mem:         32108      31031       1076          1        452      14980
-/+ buffers/cache:      15598      16509
Swap:         8191         49       8142

所以现在一切似乎都好起来了。即使缓存包括在内,我们仍然有1076 of的RAM。但是过了一段时间(我计算了java服务器重启->大约2天的时间),java进程开始使用交换空间(可以在/proc//status中看到)。今天上午,它已经开始使用10 it的RAM,而缓存的数据几乎是15 it。为什么linux将缓存内存放在应用程序真正需要的优先位置,并将其移到交换区中?我应该禁用交换吗?系统的正常运行时间是737天(这是重要的服务器),也许有什么东西卡在缓存中,应该手动清理吗?它是生产服务器,所以一切都必须谨慎处理。

两天前重新启动的进程已经在使用交换,当时有15,5GB的空闲RAM。我无法理解这种缓存的内存管理风格..。

代码语言:javascript
复制
[glassfish@pahod001 logs]$ cat /proc/20122/status
Name:   java
State:  S (sleeping)
Tgid:   20122
Pid:    20122
PPid:   1
TracerPid:      0
Uid:    537     537     537     537
Gid:    537     537     537     537
Utrace: 0
FDSize: 256
Groups: 537
VmPeak:  5995004 kB
VmSize:  5995000 kB
VmLck:         0 kB
VmHWM:   1017892 kB
VmRSS:    759988 kB
VmData:  5843144 kB
VmStk:        88 kB
VmExe:         4 kB
VmLib:     16624 kB
VmPTE:      2600 kB
VmSwap:     2844 kB
EN

回答 1

Unix & Linux用户

发布于 2019-12-08 12:16:53

您的Java占用了6GB(几乎全部是数据),并且有3MB (0.0005%)的交换空间让您担心?对于这个过程来说,46MB所用的交换(不是而不是)怎么样?

当然,不应该为了缓存而交换活动进程。但是这3MB的Java可能在几天前加载后就没有被使用过。你不知道它实际上是在交换任何东西,只是交换的算法决定了它可以更好地使用RAM。

你能解释为什么Java需要永远保持6GB吗?在我看来,它可能存在内存泄漏,或者是一种对大数据具有不可接受行为的算法。

我认为你需要一些工具,让你对整个系统有一个更广阔的诊断视角,但我手头上没有RHEL。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/556150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档