首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交换内存持续增长

交换内存持续增长
EN

Stack Overflow用户
提问于 2014-04-29 05:31:55
回答 1查看 2.1K关注 0票数 1

我有一个网络应用程序运行在玻璃鱼在RHEL。对于应用程序,这些设置如下:

代码语言:javascript
复制
Heap Memory:4GB
Perm Gen:1GB

JConsole显示:

代码语言:javascript
复制
heap memory - 500mb
non heap memory - 350mb 
threads =378

上图:

代码语言:javascript
复制
PID   User       PR  NI  VIRT RES  SHR S  %CPU  %MEM   TIME+   COMMAND
17948 root       20   0 12.8g 1.9g  22m S  1.5   16.0  14:09.11 java

从一开始,进程就消耗了12.8G。

上图还显示:

代码语言:javascript
复制
Mem:  12251392k total, 11915584k used,   335808k free,    47104k buffers
Swap:  8322944k total,  6747456k used,  1575488k free,   177088k cached

问题是交换空间在不断增加。当没有交换空间时,web应用程序将停止响应。

  1. 清除进程不会减少已使用的交换空间,而只是在计算机重新启动之后。为什么?
  2. 为什么进程启动时消耗12.8GB的虚拟空间?
  3. 如何解决这一问题?

更新:

J控制台输出(记录了24小时)显示堆内存和非堆内存并没有增加多少。即使交换空间在同一时期内被修改了1.5Gb:J控制台输出

EN

回答 1

Stack Overflow用户

发布于 2014-04-29 07:01:00

您可以看看这些答案,以了解top的输出的含义。您可以使用脚本大致报告什么使用您的交换空间。

据我所知,Linux的交换系统并不是那么简单。内核首先交换不活动内存(可能是其他应用程序的内存),以便为GF提供足够的资源。当GF被终止时,这将不会立即被交换回来。您可以尝试使用swapoff -a来迫使Linux重新交换内容,但请记住通过swapon -a重新启用它。

VIRT空间,由于顶部的管理:

任务使用的虚拟内存总量。它包括所有代码、数据和共享库,以及已换出的页和已映射但未使用的页。

我怀疑OS关于内存使用情况的报告对于调试Java应用程序是否有那么好的效果。您应该使用JVisualVM (Oracle的JDK的一部分)等工具查看JVM的内存。观察一段时间内记忆使用的进展。

此外,您可以尝试使用像日食内存分析器 (MAT)这样的工具来分析堆转储。MAT有一些不错的报告,可以帮助查找内存泄漏。如果您的应用程序的内存使用量不断增加,它似乎存在漏洞。否则,它将仅仅没有足够的内存可用。

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

https://stackoverflow.com/questions/23356235

复制
相关文章

相似问题

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