如果我有一台高端服务器,例如1T内存和8x4核CPU ......
如果我运行多个App Server(在不同的JVM上)而不是仅仅一个App Server,它会带来更多性能吗?在App Server上,我将运行一些服务(EAR和消息驱动的bean),它们相互交换消息。
顺便说一句,java 64bit现在已经没有内存限制了吗? http://java.sun.com/products/hotspot/whitepaper.html#64答案 0 :(得分:3)
如果我运行多个App Server(在不同的JVM上)而不是仅仅一个App Server,它会带来更多性能吗?
有几点需要考虑:
单个应用服务器意味着单点故障。对于许多应用程序,这不是一种选择,并且使用水平和垂直缩放是一种常见配置(即每台机器和多台机器有多个VM)。如果它们很小,添加更多机器显然更容易/更便宜。
大堆需要更长时间才能填充,因此应用程序在垃圾收集发生之前运行的时间更长。但是,更大的堆也需要更长的时间来压缩并导致垃圾收集需要更长的时间。调整VM的大小通常意味着在频率和持续时间之间找到一个很好的折衷方案(换句话说,您并不总是希望为一个VM提供尽可能多的RAM)
所以,根据我的经验,运行多台托管多台JVM的机器是通常的选择(并且通常比巨大的野兽便宜,并且为您提供更大的灵活性)。
答案 1 :(得分:1)
当您需要进行进程外通信时会自动出现性能损失,因此问题是应用程序服务器是否扩展得不够好,这样才能获得回报。
作为一个基本的经验法则,JVM设计允许使用操作系统提供的任意数量的CPU和任何数量的RAM。实际限制是特定于JVM实现的,在选择查看是否存在与您相关的限制之前,您需要仔细阅读规范。
鉴于您有一个可以利用硬件的JVM,您需要一个可以适当扩展的应用服务器。如今常见的瓶颈是每秒可处理的Web请求数量 - 现代服务器应该能够每秒处理10000个请求(请参阅http://www.kegel.com/c10k.html),但并非所有请求都能处理。
因此,首先确定您最迫切的需求(每秒连接数?内存使用量?网络带宽?)并使用它来确定最佳平台+ jvm + app服务器组合。如果您有具体需求,供应商通常会很乐意协助您进行销售。
答案 2 :(得分:1)
您最有可能通过运行具有较小堆的多个JVM 而不是单个大型JVM来获益。这有几个原因:
较小的堆表示较短的垃圾集合
更多JVM对于JVM内部的内部资源(如线程池和其他同步访问)意味着较小的竞争。
您应该在该框中放入多少个JVM取决于应用程序的功能。确定这一点的最佳方法是设置模拟生产负载的负载测试,并观察系统可以处理的请求数量随着添加的JVM数量的增长而增长。在某些时候,您会发现添加更多JVM并不会提高吞吐量。那就是你应该停下来的地方。
然而,还有另一个考虑因素。最好有多个物理机而不是一个大胖子盒。这是可靠性。如果此框由于某种原因而脱机,则会在其中运行所有正在运行的应用服务器。与单个机箱相比,运行许多单独的较小物理机器的基础设施受单个机器故障的影响较小。