首页 > 系统相关 >CentOS 7.X部署Tomcat

CentOS 7.X部署Tomcat

时间:2023-03-20 16:34:28浏览次数:40  
标签:CATALINA Tomcat CentOS 部署 tomcat XX 内存 带堆 HOME

1、安装基础库

yum -y install apr-devel gcc gcc-c++ make openssl-devel openssl java-11-openjdk-* libffi-devel redhat-rpm-config lrzsz

2、编译安装native(默认tomcat中bin目录下有)

tar xf apache-tomcat-10.0..tar.gz \
&& cd apache-tomcat-10.0.2/bin \
&& tar xf tomcat-native.tar.gz \
&& cd tomcat-native-1.2.26-src/native/ \
&& ./configure --with-apr=/usr/ --with-java-home=/usr/lib/jvm/java-11-openjdk --with-ssl \
&& make \
&& make install

3、配置环境变量

echo -e 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib \nexport LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /etc/profile.d/jdk11.sh
Source /etc/profile.d/jdk11.sh

4、修改运行模式为APR

cat $CATALINA_HOME/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"//将HTTP/1.1修改为当前值
connectionTimeout="20000"
redirectPort="8443" />

5、重启服务

$CATALINA_HOME/bin/catalina.sh stop
$CATALINA_HOME/bin/catalina.sh start

6、查看运行模式

查看$CATALINA_HOME/logs/catalina.out日志输出,初始化协议处理器是否为["http-apr-8080"]

7、配置模版

<?xml version='1.0' encoding='utf-8'?>
<!-- port from 9040 -9049 -->
<Server port="9041" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="9040" protocol="HTTP/1.1"
connectionTimeout="30000"
redirectPort="9043"
URIEncoding="utf-8"
maxThreads="1000"
acceptCount="2000"
minSpareThreads="100"
maxSpareThreads="250"
enableLookups="false"
disableUploadTimeout="true"
server="devops-1.0"/>
<Engine name="Catalina" defaultHost="test.nagios.org">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="test.devops.service" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="stageproduct.devops.service" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="StageProductService." suffix=".log" timestamp="true"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
<Context path="" docBase="/devops/StageProductService" caseSensitive="false" ></Context>
</Host>
<Host name="stagemobile.devops.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>stagemobile1.devops.com</Alias>
<Alias>stagemobile2.devops.com</Alias>
<Alias>stagemobile3.devops.com</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="StageMobile." suffix=".log" timestamp="true"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
<Context path="" docBase="/devops/StageMobile" caseSensitive="false" ></Context>
</Host>
<Host name="stagemerchant.devops.service" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="StageMerchantService." suffix=".log" timestamp="true"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
<Context path="" docBase="/devops/StageMerchantService" caseSensitive="false" ></Context>
</Host>
<Host name="stageorder.devops.service" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="StageOrderService." suffix=".log" timestamp="true"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
<Context path="" docBase="/devops/StageOrderService" caseSensitive="false" ></Context>
</Host>
</Engine>
</Service>
</Server>

8、安全加固

1、删除默认目录
rm -rf $CATALINA_HOME/webapps/*

2、管理用户注释(默认已注释)
cat $CATALINA_HOME/conf/tomcat-users.xml
<!--
<role rolename="tomcat"/>
<role rolename="rile1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->

3、隐藏版本号
cat $CATALINA_HOME/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionsTimeout="20000"
redirectPort="8443"
server="GOME1.0"/>

4、关闭自动部署
cat $CATALINA_HOME/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false"/>

5、禁止列目录(默认已关闭)
cat $CATALINA_HOME/conf/web.xml
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

6、禁用AJP端口(默认已注释)
若前端是apache,会使用AJP这个连接器;若前端是nginx做反向代理,不使用AJP连接器
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->

7、服务权限控制
chown -R devops.devops$CATALINA_HOME
sudo su - devops -c "$CATALINA_HOME/bin/catalina.sh start"

8、配置JVM
cat $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="-server
-Xmn192m
-Xms512m
-Xmx512m
-XX:MetaspaceSize=192m
-XX:MaxMetaspaceSize=192m
-XX:SurvivorRatio=65536
-XX:MaxTenuringThreshold=0
-Xnoclassgc
-XX:+DisableExplicitGC
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:-CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=90
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:log/gc.log"

9、限制访问
cat $CATALINA_HOME/conf/server.xml
<Context path="/myapp" reloadable="true" docBase="/var/www/myapp">
<valueclassName="org.apache.catalina.values.RemoteAddrValue"
allow="192.168.[1-5].*,192.168.[10-15].*" deny="″ />
</Context>

9、备注

参数

说明

-Xmx512m

最大总堆内存,一般设置为物理内存的1/4

-Xms512m

初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了

-Xmn192m

年轻带堆内存,sun官方推荐为整个堆的3/8

堆内存的组成

总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存

年轻带堆内存

对象刚创建出来时放在这里

年老带堆内存

对象在被真正会回收之前会先放在这里

持久带堆内存

class文件,元数据等放在这里

-XX:PermSize=128m

持久带堆的初始大小

-XX:MaxPermSize=128m

持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。


标签:CATALINA,Tomcat,CentOS,部署,tomcat,XX,内存,带堆,HOME
From: https://blog.51cto.com/zzzhao/6133179

相关文章

  • CentOS7.X 部署OpenVPN
    1、实验环境CentOS7.9内网ens32:172.16.9.129外网ens33:10.33.56.1002、配置路由转发echo"net.ipv4.ip_forward=1">>/etc/sysctl.d/99-sysctl.confsysctl-p3、安装openv......
  • 项目部署常用命令和方法
    java环境启动命令部署微服务时,通过命令启动jar程序时,标准命令写法,减少出错概率java-jar-Dfile.encoding=utf-8jar文件名.jar--spring.profiles.active=dev-Dfile.encodi......
  • CentOS 7.X部署SNMP
    1、简介单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(applicationlayerprotocol)、数据库模型(databaseschema)和一组资源对象。该协议能够支持网络管理系统......
  • Nginx和tomcat实现负载均衡
    拓扑图:​推荐步骤:​Nginx服务器开启路由转发功能,客户端和tomcat服务器配置IP地址设置正确安装tomcat服务器配置网站安装Nginx代理和负载均衡功能配置DNS服务器域名解析,客户......
  • centos7通过CDH部署Hadoop
    一、角色分配及安装环境准备资料下载地址:链接:百度网盘1.机器及机器角色规划2.关闭防火墙及SELinux3.安装依赖(server)yuminstall-ycyrus-sasl-plaincyrus-sa......
  • Linux环境下部署tomcat服务-单项目部署
    一、上传tomcat安装包并解压1. apache-tomcat-8.5.38.zip2.安装包可以存放任意目录二、将被测项目放入webapps目录下三、修改被测项目中的配置文件信息......
  • CentOS 7.X初始化手册
    一系统初始化操作系统版本为:CentOS_x86-x647.4.17081配置域名解析cat>>/etc/resolv.conf<<EOFnameserver202.106.0.20EOF2基础库安装yum-yinstallwgetsysstatb......
  • 部署asp.net core6 iis InProcess模式方法
    修改IIS中的配置1.修改启用应用程序池(AlwaysRunning):保证应用程序池在第一次创建或者被回收后,能自动再次重启运行。2.修改闲置超时1740分钟:长时间没有请求释放资源,可以......
  • 二进制部署docker docker-20.10.7
    1、下载 docker二进制包文件官网下载地址​​​https://download.docker.com/linux/static/stable/x86_64/​​wgethttps://download.docker.com/linux/static/stable/x86......
  • 热部署学习
    概述热部署对于我们这种开发同学来平不陌生吧,比如在IDEA修改一行代码,会自动热部署,并不需要重启,市面上热部署的框架有很多:Jrebel等。今天我就来学习一下热部署。 原理......