我在 CentOS 7.3 上使用 Tomcat 8.0.x。我使用 systemd 启动 Tomcat,以下是单元文件:
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/tomcat-instances/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/tomcat-engine
Environment=CATALINA_BASE=/opt/tomcat/tomcat-instances/
Environment='CATALINA_OPTS=-Xms128M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/tomcat-instances/bin/startup.sh
ExecStop=/opt/tomcat/tomcat-instances/bin/shutdown.sh
#ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
我们可以看到“Xms128M 和 -Xmx1024m”
在 setenv.sh 文件中,我们有以下内容:
export JAVA_OPTS="-Xms256m -Xmx2048m"
因此,当我执行“ps -ef | grep tomcat”时:
tomcat 14051 1 2 09:06 ? 00:00:50 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/tomcat-instances/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms256m -Xmx2048m -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xms128M -Xmx1024M -server -XX:+UseParallelGC -Djava.endorsed.dirs=/opt/tomcat/tomcat-engine/endorsed -classpath /opt/tomcat/tomcat-engine/bin/bootstrap.jar:/opt/tomcat/tomcat-engine/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat/tomcat-instances/ -Dcatalina.home=/opt/tomcat/tomcat-engine -Djava.io.tmpdir=/opt/tomcat/tomcat-instances/temp org.apache.catalina.startup.Bootstrap start
我们可以看到两个值:“-Xms256m -Xmx2048m”和“-Xms128M -Xmx1024M”
Tomcat 使用哪个参数?单元文件还是 setenv.sh?配置 Xmx 的最佳实践是什么?
谢谢你,
答案1
在命令行上,最后的 Xmx 获胜,在您的情况下,Tomcat 进程使用 systemd 值。
对于设置 Xmx 和 Xms 值,没有“最佳实践”。有调整 JVM 的最佳实践,其中设置正确的内存值是其中的一部分。但是,要使这些实践有意义,您必须知道将哪种应用程序部署到服务器。