java - 内存利用率

标签 java linux

我的问题是关于 RAM 利用率的。在我们的生产服务器(虚拟机)中,拥有 32 GB RAM,并且仅运行一个 Java-Tomcat,并在应用程序中使用 hazel-cast。请参阅下面的 top 命令输出和 RAM 利用率以获取更多信息。

top: 
top - 16:43:59 up 123 days, 8 min,  3 users,  load average: 0.00, 0.00, 0.00
Tasks: 339 total,   1 running, 338 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32879672k total, 31617688k used,  1261984k free,   513508k buffers
Swap: 16777208k total,    71464k used, 16705744k free,  6933936k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
23410 root      20   0 6214m 1.6g  22m S  0.3  5.1 124:00.66 java
26312 root      20   0  314m  20m 9.8m S  0.3  0.1 135:30.82 gnome-terminal
31009 root      20   0 15164 1436  952 R  0.3  0.0   0:00.02 top
    1 root      20   0 19344 1288 1068 S  0.0  0.0   0:02.72 init


RAM : 
             total       used       free     shared    buffers     cached
Mem:         32109      30876       1232          0        501       6771
-/+ buffers/cache:      23603       8505
Swap:        16383         69      16314

系统消耗了 32 个 RAM 中的 23-24 GB,并配置了 2 GB 的 JVM。 我的问题是为什么它消耗那么多内存。谁能帮我解决这个问题。

最佳答案

My question is why it is consuming that much of RAM. Can anyone help me to get it on this.

每当您读取文件时,它都会进入磁盘缓存,并一直保留在那里,直到您删除该文件或内存压力导致它被逐出。这意味着,一旦您的计算机读取了 32 GB 磁盘空间(自启动以来),您就应该期望它能够将所有内存用于某些用途。

您应该问的问题是为什么有些内存未使用。很可能是因为程序启动后又停止了。此外,操作系统会尝试保留一部分空闲内存,以应对突然的内存分配,例如启动程序。大约 1 - 2 GB 的可用空间似乎比较合理。

在顶部您可以看到 7 GB 用于“缓存”文件,0.5 GB 用于缓冲区。您的 JVM 正在使用 1.6 GB 驻留内存。其余部分由操作系统和其他程序使用。

如果您想查看内存使用情况,请运行 less/proc/meminfo

MemTotal:        8077800 kB
MemFree:         2925896 kB
Buffers:          161072 kB
Cached:          2282792 kB
Active:          3714312 kB
Inactive:        1148840 kB

注意:虽然我正在积极使用约 3.7 GB,但另外 2.2 GB 用于缓存文件。

我用来查看实际使用了多少内存的一个技巧是强制释放内存。例如

dd if=/dev/zero of=/tmp/deleteme bc=1000000 count=24000
rm /tmp/dleteme

这将创建一个 24 GB 的文件并将其删除。这将向您显示运行 top 时真正需要多少内存。我选择 24 GB,因为它大约占主内存的 75%。

关于java - 内存利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482804/

相关文章:

java - 重写 setUI 中的 setIcon() 方法(new BasicComboBOxUI){}

java - 如果sonarqube中的主要问题数量大于50,要使我们的本地构建失败

linux - 如何监控访问特定文件的进程?

java - 当有数千个组件时使动画更快

java - 重置偏移量并寻找最新偏移量的无限循环

linux - 如何在 .profile 或 .bash_profile 中设置 PATH in ubuntu

linux - 在没有特定 session 的情况下杀死 screen #

linux - 如何通过命令行将图像转换为灰度?

linux - 当我们使用 "<"重定向时,shell 做了什么?

java - 类型化通用 DAO 和实体