Amazon EC2 - 可用内存

Amazon EC2 - 可用内存

我们正在运行一个 amazon ec2 小型实例,在过去的几天里,我们注意到内存正在不断下降。

在小型实例上,我们运行 apache 和 tomcat6 Tomcat 使用以下 JVM 参数启动 -Xms32m -Xmx128m -XX:PermSize=128m -XX:MaxPermSize=256m

我们使用 nagios 来监控更新、可用磁盘空间和内存等内容。其他一切都按预期运行,但我们的内存一直在下降。我们的应用程序每天的点击量约为 50 万次

当我关闭 apache 和 tomcat 并运行 free -m 时,1.7gb 内存中只有 594mb 可用。小型实例上没有运行太多其他程序,运行 top 命令时我看不到内存去了哪里。

我们在 tomcat 上运行的应用程序是 grails webapp。我们的应用程序中可能存在内存泄漏吗?

我在网上看到有人说小型 amazon 实例非常适合运行 apach 和 tomcat。我在网上找到了几篇帖子,展示了如何设置 apache 和 tomcat 来限制内存使用量,我已经执行了这些步骤。内存没有很快用完,但随着时间的推移,内存仍在减少。

我们还有其他运行 Grails 应用程序的 Amazon EC2 小型实例,这些节点上的内存相当标准。但它们不会接收那么多流量

补充一下,当我在问题服务器上运行 top 命令时,我看不到所有内存的使用情况

非常感谢您的帮助

在我的服务器上运行 free -m 的输出如下

         total       used       free     shared    buffers     cached
Mem:          1657       1380        277          0        158        773
-/+ buffers/cache:        447       1209
Swap:          895          0        895

您认为这看起来还好吗?操作系统会在哪个阶段归还内存,它会等到内存达到 0% 还是依赖于操作系统?

答案1

请注意,操作系统可能会进行缓存,如果是的话,这不是问题(查看最后一列),用于缓存的内存实际上并不是正在使用的内存,因为进程中它已经填满了数据。实际上是操作系统缓存了经常使用的数据。如果操作系统发现内存不足,它会自动释放用于缓存的内存,如果它发现有空闲内存,它会将其用于缓存(因此您的机器的响应通常更快)。

相关内容