多个后台服务,放到一个 tomcat 还是分开放在不同的 tomcat 呢

2020-04-27 15:12:10 +08:00
 NoKey

比如我这里有 10 个服务,10 个 war 包

是放在同一个 tomcat 呢

还是放在不同的 tomcat 里呢?

放在一个 tomcat 和多个 tomcat,对于同一台机器来说,有多大差异呢?

这里面按照什么参数来考量呢?

求大佬指点一下,谢谢

4475 次点击
所在节点    程序员
29 条回复
fkdog
2020-04-27 15:18:18 +08:00
那肯定要放多个 tomcat 啊。
方便各个实例进行调整参数不影响其他服务。
gz911122
2020-04-27 15:18:22 +08:00
jar 包呗 多省事

tomcat 好麻烦啊...
kop1989
2020-04-27 15:20:20 +08:00
好问题,帮顶了。我也想知道 tomcat 有没有类似 iis 的“应用程序池”概念。还是一个 tomcat 实例就只能是一个“应用程序池”。
Hanggi
2020-04-27 15:21:01 +08:00
golang 就没有这个问题。
kaifang
2020-04-27 15:21:57 +08:00
用 docker ?
qwerthhusn
2020-04-27 15:24:53 +08:00
现在裸用 tomcat 的不多了,都是 spring boot 了
spring boot 一个应用里面内嵌一个 tomcat 容器

所以我感觉还是单独用比较好
* 重启停用或者重新部署某个应用,可能需要重启 tomcat,重新加载 10 个应用
* 没法精细调控每个应用的内存大小等
* 涉及到日志,比如 tomcat 打印的一些日志,可能会把所有应用的混在一块,比如 access.log
vincent927
2020-04-27 15:39:56 +08:00
从稳定性来讲,肯定是放不同 tomcat 好
freedom0072006
2020-04-27 15:45:13 +08:00
不同
xetv
2020-04-27 15:47:43 +08:00
各自分开放,每个服务需要多少内存各自配置,放一起可能会比较频繁出现 OOM,而且你还不好排查。总之就是一个 tomcat 放多个 war 包问题多到头大。
NoKey
2020-04-27 16:29:46 +08:00
@xetv 我在想这个问题。比如,所有服务需要的内存加到一起 16 个 g,那么,我就给这个 tomcat 分 16 个 g,和每个 tomcat 各自分,有多大差别。然后,tomcat 的线程和连接数量等设置问题,同一台机器的话,这个设置肯定有个上限,设置成一个和多台分开设置,加到一起的,始终不能超过上限。那么,就配置这方面来说,是不是放一个和放多个是一样的。优势是不是还是在可以单独停机上面😓
NoKey
2020-04-27 16:30:36 +08:00
@qwerthhusn 我们这里要把 springboot 编成 war 包放到 tomcat 里😓
daozhihun
2020-04-27 17:43:52 +08:00
建议分开,不然一个挂了可能导致全都挂了。
tomcat 的内存占用我觉得并不是问题,spring boot 框架本身的内存占用才是大头,相比之下 tc 的开销可以忽略了
securityCoding
2020-04-27 17:45:24 +08:00
建议不同 tomcat , 不过现在大都是 fatjar 了
janda
2020-04-27 20:44:05 +08:00
可以多个 tomcat 、前面放一个 nginx 挡着!反向代理设置每个 tomcat 的路径、不影响使用
cpstar
2020-04-27 22:21:40 +08:00
直接上 docker 多省心
NoKey
2020-04-28 00:46:04 +08:00
@cpstar 省心么?上 docker 就要维护 docker,然后要上管理 docker 的系统,一层一层增加运维的事😄
abcbuzhiming
2020-04-28 07:37:23 +08:00
user jar!not war!口号的提出的一个原因就是 tomcat 里多个应用是会互相影响的,有的时候一个应用把线程池耗干了会卡死其它应用。所以现在都推荐一个 jar 单独一个应用
abcbuzhiming
2020-04-28 07:38:20 +08:00
@cpstar 在你上足够规模之前 docker 不省心,反而是个麻烦,我更倾向于直接用 systemd 管理应用
xetv
2020-04-28 09:05:09 +08:00
@NoKey #10 一个 tomcat 分 16g,多个应用同时跑,那每个应用占用的是不一样的,比如说有个应用代码有缺陷可能会引起整个 tomcat 内存频繁 gc 之类的,反而影响其他应用。如果是每个 tomcat 各自 1g,那不会出现互相影响了。还有就是 cpu 线程问题,那一个 tomcat 和多个 tomcat 其实没啥太大区别。
你提到 tomcat 的连接数量,如果是多个应用一个 tomcat,那是共用连接数,分开放是各自使用各自的连接数。这点是有区别的。

优势不仅是单独停机,而是运行的时候不在同一个容器里面,不会出现互相影响的情况。有些应用频繁申请内存频繁 gc,有些应用占用资源少,内存上是共用内存和各自使用各自的内存的区别,分开放不会引起太大的干扰。

我们这边之前由于共用同一个 tomcat 出现过太多问题了,我是推荐分开放的。
goinghugh
2020-04-28 09:47:09 +08:00
@xetv 如果内存较为紧张,从减少内存开销的角度看,放在一个 tomcat 中是更好的吧 ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX