经常有读者在后台向我提问,一些个性化的问题就直接在后台回复了。也有些比较普遍的问题,比如下面这个:

自己的项目有多个应用,这些应用是要部署到同一个 Tomcat 里好,还是多个应用分别部署到不同的 Tomcat 里,每个里面只部署一个应用好呢?

最近在 Tomcat 官方的「邮件组」里也看到类似的问题,可能这个问题不分国界。一些 Tomcat 的 commiter 也给出了自己的看法,大家看法都不一样,正好咱们一起来看看,两种情况相比较,到底怎样使用适合。

首先我们自己先想一下,如果多个应用部署到一个 Tomcat 实例中,优劣分别有哪些呢?

优势 :

●  安装管理、监控都方便,只需要安装一个 Tomcat,所有的操作都指向同一个实例即可。

劣势:

●  多个应用共用 Tomcat 的内存,容易互相影响。如果有一个应用占用堆太多,频繁的 GC 也会使其他应用跟着暂停。

每个 Tomcat 实例部署一个应用呢?

优势 :

●  多个应用之间 Tomcat 的内存互相隔离,互相之间无影响。一个应用crash,频繁 GC,都只影响其自己,影响面缩小。

劣势:

●  相比一个实例,安装管理、监控都较繁琐一些。可以通过安装一个实例,设置不同的CATALINA_HOME来简化一些操作。

邮件组里的问题描述比上面的更详细一些。并且罗列了自己认为的优劣。

邮件内容较多,我选其中关键的几段翻译如下,其中描述意见分歧在开发人员和运维人员之间:

运维认为一个 Tomcat 部署多个应用,原因如下:

●  省内存 (每个 Tomcat 都会有内存的 footprint,即使没有应用部署运行)
 ●  省去额外的文件系统 (logs, tomcat installation, temp directory)
 ●  省去 nagios 监控配置
 ●  省去不少独立的端口 (security considerations)
 ●  省去每个都打安全补丁

开发人员认为应该一个 Tomcat里只部署一个应用,理由如下:

●  多个应用部署在一起,启动时间太长
 ●  多个应用部署在一起,一个出了问题,会影响到其他的应用 (OOM, 线程数打满 等等)
 ●  如果你需要在线上进行应用heap, 线程的dump, cpu使用等诊断分析,独立部署则不会影响到其他应用

邮件组里的回复,大部分倾向于一个应用部署一个Tomcat:

●  这样概念上最简单,应用之间不会互相影响。同时呢,可以使用不同的JVM,不同的环境,不同的库,不会互相限制,也不用测试这些应用间的兼容性。
 ●  多个应用部在一起,如果都是占用内存比较大的,比如占用Heap 较多,如果赶上一次Full GC,就会导致暂停时间较长,这样多个应用的线程都受影响。

Tomcat 的核心开发人员 Mark 认为这两种情况应该视情况而定。如果你的一个应用需要特别多的资源,这样尽量一个应用部署到一个Tomcat中以满足企业的要求。否则,倾向于多个应用共用同一个 Tomcat ,这样方便管理和运维。

我个人倾向于生产环境每个应用独立部署,每个应用独立监控,资源管理也互相隔离。在开发的时候,可以只设置一个 Tomcat 实例,部署多个应用到一个Tomct也更快捷,没那么多个性化要求,不需要再配置一堆的端口。当然,如果线上也都是各种小应用,没什么要求,部署到一起也OK。

总结下,生产上如果应用小,嫌麻烦,出问题可接受,都放到一起也没问题。如果占用资源比较大,需要稳定性等,尽量独立部署,开发环境就怎么方便怎么来。

原文发布时间为:2018-11-7

本文作者:侯树成

本文来自云栖社区合作伙伴“Java后端技术”,了解相关信息可以关注“Java后端技术”。

Tomcat应用部署是否要一个萝卜一个坑?相关推荐

  1. Tomcat应用部署是否要一个萝卜一个坑?

    经常有读者在后台向我提问,一些个性化的问题就直接在后台回复了.也有些比较普遍的问题,比如下面这个: 自己的项目有多个应用,这些应用是要部署到同一个 Tomcat 里好,还是多个应用分别部署到不同的 T ...

  2. Tomcat应用部署,是否要一个萝卜一个坑?

    经常有读者在后台向我提问,一些个性化的问题就直接在后台回复了.也有些比较普遍的问题,比如下面这个: 自己的项目有多个应用,这些应用是要部署到同一个 Tomcat 里好,还是多个应用分别部署到不同的 T ...

  3. Linux下在tomcat上部署项目

    date: 2018/12/12 10:17:40 一 项目打包 1 IDEA打包方式 了解IDEA项目结构: 快捷键Ctrl+Shifr+Alt+s 此处可以选择要打的包形式 在Tomcat中配置, ...

  4. Django项目在Linux服务器上部署和躺过的坑

    引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...

  5. 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)

    在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...

  6. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录.  一.静态部署       静态部署指的是我们在服务器启动之 ...

  7. eclipse下tomcat添加部署Module,Web名称与项目名称不一致的解决方法

    eclipse下tomcat添加部署Module,Web名称与项目名称不一致的解决方法 参考文章: (1)eclipse下tomcat添加部署Module,Web名称与项目名称不一致的解决方法 (2) ...

  8. Intellij IDEA 创建Web项目并在Tomcat中部署运行

    一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选择Java类型,在 Module name 处输入项目名,点击Next 3.勾选 Web Applicati ...

  9. 如何在tomcat前部署一个nginx

    在tomcat应用已经发布后,如何在tomcat前部署一个nginx,可以正常访问jsp,静态资源(html,css,js) 这里tomcat的端口号是8888 1 upstream morris { ...

最新文章

  1. sharding-jdbc分库分表的 4种分片策略
  2. 二十、欢迎来到掘金量化
  3. OpenGL 使用FDTD求解电磁波方程
  4. 华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...
  5. Python(pycharm)在windows下路径 ( ' / ' 与' \ ' )的问题
  6. 深度学习这么调参训练_深度学习训练的小技巧,调参经验(转)
  7. 51nod 1693 水群
  8. c语言~符号_条件编译指令(符号),C语言条件编译指令完全攻略
  9. JavaScript之JS单线程|事件循环|事件队列|执行栈
  10. VisualGDB系列8:使用VS创建CMake Linux项目
  11. Lodop简短问答客户反馈篇 及排查步骤 及注册相关
  12. 公用计算机不使用键盘鼠标,鼠标键盘同时不能用了怎么回事_电脑的键盘和鼠标不能同时用如何解决...
  13. 概念学习和一般到特殊序
  14. 杭州电子科技大学计算机学硕复试,杭州电子科技大学2020年研究生复试常见问题解答...
  15. flash player 11.2 64位 linux,Adobe Flash Player 11.2.202 Beta 1支持 64位操作系统
  16. 基于SSM+VUE的交通事故案例库系统(前后端分离)
  17. 高洛峰mysql_【干货】MySQL 安装与安全优化
  18. 软件工程——理论与实践(第二版)课后习题整理
  19. 推荐系统[九]项目技术细节讲解z4:向量检索技术工程上实践,曝光去重实践以及检索引擎该如何选择:支撑亿级索引、5毫秒级的检索[elasticsearch、milvus]
  20. 注册表编程,程序记忆功能

热门文章

  1. TANX英文翻译软件测试工资,ktanx-jdbc 1.0.5发布,增加自定义sql解析及部分方法修改...
  2. Unity着色器常用关键字及属性
  3. 逻辑学学习.6--- 命题逻辑(四):推演的简单规则
  4. 虚假交易,跑单,规蜜,官方如何申诉,某宝如何从技术手段判定订单异常,从技术角度和操作流程介绍商家在跑单和受到欺诈如何操作减少损失,
  5. 2021年入职体检有哪些项目?
  6. 指纹识别不安全 美研究人员万能指纹解锁成功率达65%
  7. 今日科技联播:特斯拉回应苹果“疯狂挖人”,对方比我们有钱100倍
  8. execl的常用函数
  9. 利用Python做一个简单的对战小游戏
  10. UGC、PGC、OGC概念、例子和关联和区别