当前位置: 首页 > 知识库问答 >
问题:

在2台Debian服务器上运行的相同tomcat映像的2个容器上的不同行为

哈骞仕
2023-03-14

当我在 2 台 Debian 服务器上运行 Docker 雄猫管理器时,我有以下 2 个显示器:

Tomcat1:https://i.stack.imgur.com/kucJQ.png

Tomcat2:https://i.stack.imgur.com/ygOCh.png

Tomcat状态内存池以不同的名称列出,如“PS

两个容器以相同的方式运行:

docker run   --name tomcat-test   -it   -p 8083:8080   -v /tmp/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml   -v /tmp/context.xml:/tmp/context.xml   tomcat:8.5-jdk8-openjdk  /bin/bash -c "mv /usr/local/tomcat/webapps /usr/local/tomcat/webapps2; mv /usr/local/tomcat/webapps.dist /usr/local/tomcat/webapps; cp /tmp/context.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml; catalina.sh run"

使用相同的参数 xml 文件:

cat /tmp/context.xml
<Context antiResourceLocking="false" privileged="true" >
  <!--
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  -->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

# cat /tmp/tomcat-users.xml
<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="tomcat" password="s3cret" roles="manager-gui,manager-script"/>
</tomcat-users>

两台服务器的版本相同:

# cat /etc/debian_version
9.13

# docker version
Client: Docker Engine - Community
 Version:           19.03.15
 

知道为什么会有这样的差异吗?运行相同映像的两个容器不应该有完全相同的行为吗?这是一个很小的差异,但我想知道是否有这样的差异,我已经看到了,也许还有其他的我没有看到...

共有1个答案

桂飞翼
2023-03-14

内存池的名称取决于所使用的垃圾收集器实现。这又取决于运行JVM的服务器的特性(内存、实际/虚拟CPU的数量)。

以<code>PS<code>为前缀的实例报告内存池必须使用并行垃圾收集器(请参阅此问题)。另一个实例可能使用串行垃圾收集器。

参见这个答案,了解所使用的GC实现如何依赖于服务器的特征。

 类似资料:
  • 我想部署一个tomcat服务器,以便它同时侦听两个端口(都用于超文本传输协议)。 为了确保您正确理解这个需求,我们只有一个服务器实例,但希望侦听HTTP协议的两个端口。例如,任何人都可以使用端口号7080和8080访问部署在我的服务器中的应用程序 有可能做到吗?如果可能,我们如何实现这一点?

  • 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 在一些情况下,你可能想要在同一台机器上运行多个mysqld服务器。你可能想要测试一个新的MySQL发布,同时不影响现有产品的设置。或者,你可能想使不同的用户访问来访问不同的mysqld服务器以便他们自己来管理。(例如,你可能是一个Internet服务提供商,

  • 问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行

  • 问题内容: 我是Docker的新手,感谢您的耐心配合。 我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件)? 现在,我的理解是,一旦构建了映像,就可以部署它,但是对我来说,问题是,当相同的应用程序之间的配置不同时,我看不到构建同一应用程序的多个映像的意义。容器。 如果这是正常现象,那么我将不得不处理它,但是,如果还有其他方法,请让我摆脱痛苦!:) 谢谢! 问

  • 问题内容: 我试图通过在经典ASP中查询2个数据库(Sybase)来生成报告。 我创建了2个连接字符串: 数据库 A的connA数据库B的connB 两个数据库都位于同一台服务器上(不知道这是否重要) 查询: 其次是: 当我尝试在浏览器中打开此页面时,出现错误消息: Microsoft OLE DB提供程序的ODBC驱动程序错误‘80040e37’ 找不到[DataDirect] [ODBC Sy

  • 问题内容: 我正在使用使用node_redis的kue,但是我已经在会话中使用了,所以我想在特定端口上创建一个服务器,说默认值,然后在port上侦听。 我将如何做到这一点?我发现这篇文章讨论的是类似的内容,但是我并不是真的想要创建一个初始化脚本来执行此操作。 问题答案: 启动redis-server并为“ port”提供一个不同的参数,可以在命令行中完成: 例如,您也可以这样做,以便在启动时进行。