我的问题是关于RAM利用率。在我们的生产服务器(虚拟机)中,拥有32 GB的RAM,并且在应用程序中只运行一个带有淡化转换的Java-Tomcat。有关详细信息,请参阅下面的命令输出和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个中消耗了23-24 GB的RAM,并配置了2 GB的JVM。 我的问题是为什么它消耗了大量的RAM。任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
我的问题是为什么它消耗了大量的RAM。任何人都可以帮我解决这个问题。
每当你读取一个文件时,它会进入磁盘缓存,它会一直保留到你删除文件或内存压力导致它被驱逐。这意味着一旦您的机器读取了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用于缓存文件。
我用来查看真正使用多少内存的技巧是强制内存。 e.g。
dd if=/dev/zero of=/tmp/deleteme bc=1000000 count=24000
rm /tmp/dleteme
这将创建一个24 GB的文件并将其删除。这将显示运行顶部时真正需要多少内存。我选择了24 GB,因为它约占主存储器的75%。