我的问题是关于 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/