我们是一群来自委内瑞拉的快乐开发者,开发了一个 tomcat5.5+java+spring+hibernate+mysql+jstl+(flex) 应用程序。现在我们将它们安装给客户,让他们感到满意,每个客户都在自己的域中。我们使用 Linode 作为托管服务提供商,并使用 cpanel 的 WHM 软件来帮助我们快速创建帐户,并维护邮件服务器等。并让用户访问他们的邮件帐户。
所以,我们相处得很好,直到我的 tomcat 开始不时停止工作,出现内存错误,重新启动 tomcat 后一切又恢复正常。有了更多的客户,购买了更多的硬件,直到硬件不再产生任何影响,了解了堆大小,现在我给 tomcat 提供了更多的堆大小,现在整个服务器不时会崩溃。连接 Jconsole,我可以看到每 10 分钟内存峰值一次,有时频率较低。每次迭代峰值都会更高,直到崩溃。需要有关如何扩展此类应用程序的提示,所以我向大佬们(你们)寻求任何提示、指导,任何有关扩展我的架构的信息。谢谢!
答案1
如果整个服务器崩溃,则可能是您为 JVM 分配了过多内存。您必须为操作系统、网络连接和缓冲区留出一些空间。在 JVM 方面,如果您的内存使用量持续增长,则说明存在某种泄漏或会话保持时间过长,或者分配的内存不足以满足此用户数量。获取有关每个会话的内存使用量的一些指标。
jvm 的行为是,只要内存可用,就分配内存,当它找不到更多可用内存时,它就会进行垃圾收集(部分 GC 或完整 GC,取决于内存压力),您应该在垃圾收集后检查最低点,看看每次 GC 后最低点是否会升高。还要检查 GC 时间,如果您的应用程序在 GC 上花费了太多时间,而您无法为其提供更多内存,那么是时候进行扩展和负载平衡了。