比如我这里有 10 个服务,10 个 war 包
是放在同一个 tomcat 呢
还是放在不同的 tomcat 里呢?
放在一个 tomcat 和多个 tomcat,对于同一台机器来说,有多大差异呢?
这里面按照什么参数来考量呢?
求大佬指点一下,谢谢
1
fkdog 2020-04-27 15:18:18 +08:00
那肯定要放多个 tomcat 啊。
方便各个实例进行调整参数不影响其他服务。 |
2
gz911122 2020-04-27 15:18:22 +08:00
jar 包呗 多省事
tomcat 好麻烦啊... |
3
kop1989 2020-04-27 15:20:20 +08:00
好问题,帮顶了。我也想知道 tomcat 有没有类似 iis 的“应用程序池”概念。还是一个 tomcat 实例就只能是一个“应用程序池”。
|
4
Hanggi 2020-04-27 15:21:01 +08:00
golang 就没有这个问题。
|
5
kaifang 2020-04-27 15:21:57 +08:00
用 docker ?
|
6
qwerthhusn 2020-04-27 15:24:53 +08:00
现在裸用 tomcat 的不多了,都是 spring boot 了
spring boot 一个应用里面内嵌一个 tomcat 容器 所以我感觉还是单独用比较好 * 重启停用或者重新部署某个应用,可能需要重启 tomcat,重新加载 10 个应用 * 没法精细调控每个应用的内存大小等 * 涉及到日志,比如 tomcat 打印的一些日志,可能会把所有应用的混在一块,比如 access.log |
7
vincent927 2020-04-27 15:39:56 +08:00
从稳定性来讲,肯定是放不同 tomcat 好
|
8
freedom0072006 2020-04-27 15:45:13 +08:00
不同
|
9
xetv 2020-04-27 15:47:43 +08:00
各自分开放,每个服务需要多少内存各自配置,放一起可能会比较频繁出现 OOM,而且你还不好排查。总之就是一个 tomcat 放多个 war 包问题多到头大。
|
10
NoKey OP @xetv 我在想这个问题。比如,所有服务需要的内存加到一起 16 个 g,那么,我就给这个 tomcat 分 16 个 g,和每个 tomcat 各自分,有多大差别。然后,tomcat 的线程和连接数量等设置问题,同一台机器的话,这个设置肯定有个上限,设置成一个和多台分开设置,加到一起的,始终不能超过上限。那么,就配置这方面来说,是不是放一个和放多个是一样的。优势是不是还是在可以单独停机上面😓
|
11
NoKey OP @qwerthhusn 我们这里要把 springboot 编成 war 包放到 tomcat 里😓
|
12
daozhihun 2020-04-27 17:43:52 +08:00
建议分开,不然一个挂了可能导致全都挂了。
tomcat 的内存占用我觉得并不是问题,spring boot 框架本身的内存占用才是大头,相比之下 tc 的开销可以忽略了 |
13
securityCoding 2020-04-27 17:45:24 +08:00
建议不同 tomcat , 不过现在大都是 fatjar 了
|
14
janda 2020-04-27 20:44:05 +08:00
可以多个 tomcat 、前面放一个 nginx 挡着!反向代理设置每个 tomcat 的路径、不影响使用
|
15
cpstar 2020-04-27 22:21:40 +08:00
直接上 docker 多省心
|
16
NoKey OP @cpstar 省心么?上 docker 就要维护 docker,然后要上管理 docker 的系统,一层一层增加运维的事😄
|
17
abcbuzhiming 2020-04-28 07:37:23 +08:00
user jar!not war!口号的提出的一个原因就是 tomcat 里多个应用是会互相影响的,有的时候一个应用把线程池耗干了会卡死其它应用。所以现在都推荐一个 jar 单独一个应用
|
18
abcbuzhiming 2020-04-28 07:38:20 +08:00
@cpstar 在你上足够规模之前 docker 不省心,反而是个麻烦,我更倾向于直接用 systemd 管理应用
|
19
xetv 2020-04-28 09:05:09 +08:00
@NoKey #10 一个 tomcat 分 16g,多个应用同时跑,那每个应用占用的是不一样的,比如说有个应用代码有缺陷可能会引起整个 tomcat 内存频繁 gc 之类的,反而影响其他应用。如果是每个 tomcat 各自 1g,那不会出现互相影响了。还有就是 cpu 线程问题,那一个 tomcat 和多个 tomcat 其实没啥太大区别。
你提到 tomcat 的连接数量,如果是多个应用一个 tomcat,那是共用连接数,分开放是各自使用各自的连接数。这点是有区别的。 优势不仅是单独停机,而是运行的时候不在同一个容器里面,不会出现互相影响的情况。有些应用频繁申请内存频繁 gc,有些应用占用资源少,内存上是共用内存和各自使用各自的内存的区别,分开放不会引起太大的干扰。 我们这边之前由于共用同一个 tomcat 出现过太多问题了,我是推荐分开放的。 |
23
ren2881971 2020-04-28 17:03:07 +08:00
多个 tomact 这样可以利用多个 jvm 。如果多个应用共用一个 jvm 性能很差。
|
24
iminto 2020-04-28 17:16:17 +08:00
|
25
kop1989 2020-04-28 17:22:02 +08:00
@iminto 当然,但是 iis 之类的 web 容器是有“应用程序池”概念的,也就是一个 iis 容器可以提供多个互不影响的“应用程序池”。
tomcat 据我所知应该是不能建立多个互不影响的 web 容器空间的吧? |
27
cpstar 2020-04-29 00:08:37 +08:00
@NoKey 那你要把简单的事情复杂化,那是不一样的
@abcbuzhiming docker 这东西,配全了自然好。但是如 LZ 单机起 10 个服务,然后反向代理或者散端口,咱不说服务器扛住扛不住,就这些配置(包括 nginx 和各个 tomcat 的)就够折腾一阵子了。docker 至少把配置都给虚拟化了,简单一个命令行,启动 10 个虚拟应用,不省心么 |
28
NoKey OP @cpstar docker 用的不多,请教一下,docker 里面的 tomcat 需要配置不? docker 上面还是应该有一个 nginx 吧?
|
29
cpstar 2020-04-29 23:48:24 +08:00
@NoKey tomcat 想启动起来,得把 java_home 弄好吧,得把 server.xml 配置上吧,甚至 context.xml 和 web.xml 都得搞一搞,然后 catalina.sh 。相比较,docker 一条命令行,端口、webapps 都配置好了,当然想深入配置的话,可以把 server.xml 单拎出来,至于 java,镜像里已经封装好了。
比如一句 docker run -it --rm -p 8888:8080 tomcat:9.0,直接启动一个标准 tomcat 实例,增加了-p 参数,开本机的 8888 端口对应到虚机里的 8080 端口,也就是将标准 tomcat 的 8080 转成了 8888,就这个过程按照配置的话至少 vi 一下 server.xml 。 如果一个实例,那这么干一票也就算了,但是 10 个实例,10 条命令行省心还是干 10 次配置省心呢? 至于前端的 nginx,看 lz 需求了,我感觉大概率他只需要 10 个端口,不需要统一端口通过 servername 或者 uri_path 区分 |