多个JVM与单个应用服务器

Nok*_*oky 16 java jvm java-ee appserver

我正在处理一个系统,该系统在每个客户的JVM中运行Java应用程序.我们有大约六个专用服务器,它们现在总共运行着近100个JVM,还有一组用于管理这些JVM的自定义脚本.此设置实际上显示了它的时代:管理许多JVM正在成为监控/管理的噩梦,我们一直在处理堆大小问题.我们想转向更现代的方法,只需在每个物理机器的单个应用服务器中运行一堆应用程序.但是,保持应用程序分离确实在隔离方面具有明显的优势(例如,内存不足错误仅影响一个客户).每个客户的软件堆栈的内存要求各不相同.

我的问题:有没有办法在这里兼顾两个世界并在一个JVM(应用服务器)中运行多个应用程序并仍然保持一定程度的隔离?或者,这些天你需要管理一组应用程序的内存需求,这只是现代生活中的事实吗?除了我在这里缺少的应用服务器或Java EE容器(例如Wildfly或Spring)之外,还有其他解决方案吗?看起来这个系统是另一个时代的坚持!

Gee*_*nte 8

结帐"多租户"JVM.

IBM的JRE已经拥有它:http://www.ibm.com/developerworks/library/j-multitenant-java/

Waratek已经在Oracle JRE之上实现了它,他们创建了ElastiCat,这是一个Tomcat派对,可以在同一个容器中隔离不同的应用程序:http://www.elasticat.com/faq/

传闻多租户也出现在官方的Oracle Java 9 JVM中.

================================================== =====

更新:Java 9已经发布,但Oracle没有关于多租户的消息.现在看来他们更喜欢拥有多个JVM,甚至是多个容器(例如docker).


Mic*_*ael 5

这两种方法都有利有弊:

共享JVM

  • 较低的开销 - JVM内存占用(核心库等)只需要加载一次.
  • 更好的内存使用.Java进程将占用当前可能未使用的堆空间的OS内存.

单独的JVM

  • 来自"贪婪"或"漏洞"应用程序的绝缘.
  • 恶意代码提高了安全性.
  • 更新更容易,更新一个应用程序而不会降低另一个应用程序

总的来说,我不会制定一揽子政策.寻找小型/微型服务或其他低使用率的应用程序,这些应用程序可能是首先分享并从那里扩展的好候选者.