我可以在同一台机器上运行两个 tomcat 实例吗?

Posted

技术标签:

【中文标题】我可以在同一台机器上运行两个 tomcat 实例吗?【英文标题】:Can I run two tomcat instances on the same machine? 【发布时间】:2011-06-08 08:43:21 【问题描述】:

我可以在同一台机器上运行两个具有两个不同端口的 Tomcat 服务器吗?它会产生任何问题吗?当我运行 tomcat 时,它会在任务管理器中创建 javaw.exe 文件。

【问题讨论】:

任务管理器旁注:它只列出进程。您看到的 javaw.exe 只是启动的可执行文件的名称,但它没有创建任何新文件。就像您创建一个类的两个实例一样。 exe文件就像类,进程是实例:) 如果其中任何一个解决了您的问题,您应该接受那个有效的。 【参考方案1】:

是的,这绝对没问题。我已经做过很多次了。不过,您需要检查 所有 用于 Tomcat 的端口。我不记得它是否还有一个特殊的“本地控制”端口,但如果有的话,它们也需要有所不同。

【讨论】:

@krishna,请注意,如果您发现一个有用的答案,您可以(并且应该)通过单击其左侧的向上箭头来支持它:-) 还有一项额外的建议。您可能希望为每个 tomcat 实例创建单独的日志文件。在这种情况下,使用 -Dlog4j.properties 为每个 tomcat 实例传递日志配置。 对于“所有端口”,Jon 至少意味着 Non-SSL、SSL、shutdown 和 AJP。 我可以通过更改端口号来运行它...谢谢【参考方案2】:

你可以在你的服务器/PC上运行无限的tomcat实例,当然你需要为每个实例定义不同的端口。

【讨论】:

【参考方案3】:

是的!你可以。您需要更改端口才能拥有另一个实例。

请按照以下步骤操作。

1.) 在 Tomcat 安装文件夹\conf\

中找到 server.xml

2.)查找以下类似语句

<!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

3.) 关于 Tomcat 的 server.xml 文件引用它在端口 8080 上运行。将 Connector port=”8080” 端口更改为任何其他端口号。

例如

<Connector port="8181" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

4) 编辑并保存 server.xml 文件。重新启动 Tomcat。完成

【讨论】:

不要忘记 SHUTDOWN 端口(在server.xml 配置文件的开头。你也可以使用这个教程 -- crunchify.com/…【参考方案4】:

除了将Connector port 更改为以下答案之一中所述的protocol="HTTP/1.1"

我认为它需要更改“关闭”的服务器端口

<Server port="8005" shutdown="SHUTDOWN">

还有AJP端口号。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

如果你想并行运行多个 tomcat 实例。

【讨论】:

好的和整洁的答案,作为附加,除了连接器端口、Shutdwon 端口和 AJP 端口,您可能还想更改 SSL 的连接器端口: 【参考方案5】:

一般我们也设置 CATALINA_HOME 属性。所以启动脚本首先读取 catalina_home ,然后从中找出路径的其余部分。如果设置了此环境变量,并且如果您尝试从任何复制粘贴 tomcat 安装位置运行 tomcat,您将运行由 CATALINA_HOME 指向的 tomcat。

因此,在同一台机器上运行两个 tomcat 时,请删除 CATALINA_HOME 属性。这样,它将根据您运行启动脚本的目录设置 CATALINA_HOME 属性。

【讨论】:

【参考方案6】:

添加一些关于如何完成该操作的详细说明:

    Step by step 在一台服务器上运行多个 Tomcat 实例。 上面的一个older version。 Explanation 在此类设置中发挥作用的各种环境变量和文件夹。

【讨论】:

【参考方案7】:

正如这里已经讨论过的,您可以省略 CATALINA_HOME 环境变量并使用 catalina.sh 脚本来管理容器的生命周期,或者您可以定义另一个变量,如 CATALINA_HOME1 来指向新的 tomcat 的安装目录并修改它的 catalina。 sh 脚本使用 CATALINA_HOME1 而不是原来的 CATALINA_HOME 参考。

在任何情况下,您都可以通过省略任何名为 CATALINA_HOME 引用的环境变量来避免这一切,只需链接到相应的 tomcat 的 catalina.sh 脚本。

示例:

cd /usr/sbin
ln -s /usr/local/java/apache-tomcat-6.0.37/bin/catalina.sh catalina1
ln -s /usr/share/java/apache-tomcat-6.0.37/bin/catalina.sh catalina2

然后像这样(从任何地方)启动你的tomcat:

catalina1 start
catalina2 start

汤姆

【讨论】:

【参考方案8】:

这是我在 Windows 上运行两个 Tomcat(Tom1 和 Tom2)的经验/过程:

    根据http://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_HowTo.html设置Tomcat

    但是,Tom1 可以正常启动,但 Tom2 不能。

    因此,除了上述之外,在 server.xml 中,制作/更改以下内容(在 Tomcat 6.0.44、JDK 1.6.0_45 上):

    第 22 行:Tom1 关闭端口 = 9001 第 22 行:Tom2 关闭端口 = 9002

    第 53 行:Tom1 服务名称 = "Catalina1" 第 53 行:Tom2 服务名称 = "Catalina2"

    第 69 行:Tom1 连接器 (http) = 9001 第 69 行:Tom2 连接器 (http) = 9002

    第 71 行:Tom1 重定向端口 = 8443 第 71 行:Tom2 重定向端口 = 8444

    第 90 行:Tom1 连接器 (ajp) = 8009 第 90 行:Tom1 重定向 = 8443 第 90 行:Tom2 连接器 (ajp) = 8010 第 90 行:Tom2 重定向 = 8444

    第 102 行:Tom1 引擎名称 = "Catalina1" 第 102 行:Tom2 引擎名称 = "Catalina2"

    启动每台服务器

瞧!

【讨论】:

【参考方案9】:

我遇到过类似的情况,here 中提到的答案以非常简洁明了的方式解决了它。

假设您在 C:\apache-tomcat-7.0.39 中只有一个 Tomcat 文件夹,并且您希望从中运行两个实例。

确保您设置了 CATALINA_HOME 系统/用户变量,并且 指向 C:\apache-tomcat-7.0.39

创建一个文件夹 C:\instance1。复制 conf、webapps 和 temp 文件夹 C:\apache-tomcat-7.0.39 并将它们粘贴到 C:\instance1。你可以删除 来自 instance1 下的 webapps 和 temp 文件夹的内容,但是 不要触摸 conf 内容。现在复制>粘贴 C:\instance1 并重命名它 到实例2。这样,instance1 和 instance2 都将具有 相同的内容。转到 C:\instance2\conf,编辑 server.xml 并更改 这些端口的编号(我标记为 XXXX):

将您想要的任何内容部署到 instance1\webapps 和 instance2\webapps 在C:\

下创建以下4个批处理文件

instance1_startup.bat

@echo off

set CATALINA_BASE=C:\instance1

cd "%CATALINA_HOME%\bin"

set TITLE=My Tomcat Instance 01

call startup.bat %TITLE%

instance1_shutdown.bat

@echo off

set CATALINA_BASE=C:\instance1

cd "%CATALINA_HOME%\bin"

call shutdown.bat

instance2_startup.bat

@echo off

set CATALINA_BASE=C:\instance2

cd "%CATALINA_HOME%\bin"

set TITLE=My Tomcat Instance 02

call startup.bat %TITLE%

instance2_shutdown.bat

@echo off

set CATALINA_BASE=C:\instance2

cd "%CATALINA_HOME%\bin"

call shutdown.bat

运行 instance1_startup.bat 和 instance2_startup.bat,希望它 应该可以。

【讨论】:

以上是关于我可以在同一台机器上运行两个 tomcat 实例吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在同一台机器上运行多个elasticsearch实例进行日志聚合吗?

JBoss 和单独的 TomCat 在同一台机器上

可以在同一台计算机上运行具有不同配置文件的同一应用的两个实例吗?

当多个java程序在同一台机器上运行时

可以在同一台机器上安装两个不同版本的 Android Studio 吗?

我可以在同一台计算机上运行两个 Web 服务器吗?