RAM利用率

时间:2014-12-15 11:14:54

标签: java linux

我的问题是关于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。任何人都可以帮我解决这个问题。

1 个答案:

答案 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%。