Linux下Tomcat的安装和使用

最近在新搭服务器,顺便就小记一下

Tomcat安装:

yum install tomcat

 

Tomcat启动相关命令:

systemctl start tomcat.service
systemctl stop tomcat.service
systemctl restart tomcat.service

也可以用

ps -axu | grep tomcat
kill -9 [PID]

sh <tomcat dir>/bin/startup.sh

Tomcat配置(server.xml):

如果要求不高,最简单的方法是在webapps目录中添加项目,

其中ROOT目录默认为主目录,不需要添加路径名。

 

如果需要同一个tomcat多个域名,就在Host同一级添加

 <Host name="<domain>" appBase="webapps" unpackWARs="false">
    <Context  path="" reloadable="false" docBase="<code dir>" workDir="<code dir>"></Context>
 </Host>

如果需要域名相同,就在Host中添加Context

<Context path="/" docBase="<code dir>" />

 

Tomcat强制关闭:

Linux系统下,tomcat默认的shutdown.sh不能kill掉对应的进程,如果直接调用再start,会导致新开一个进程,而且代码还不是最新的。

修改catalina .sh

PRGDIR=`dirname "$PRG"`
#新增如下代码
if [ -z "$CATALINA_PID" ]; then
	CATALINA_PID=$PRGDIR/CATALINA_PID
fi

修改shutdown.sh

#修改前
exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
#修改后
exec "$PRGDIR"/"$EXECUTABLE" stop -force "$@"

 

Tomcat 启动过慢

有时候可能会遇到

WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [167,755] milliseconds.

可以修改JVM解决(文末有方法),有兴趣深入的可以百度。

export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m -Djava.security.egd=file:/dev/./urandom"

 

 

可能遇到的错误:

Mar 13, 2020 6:54:33 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.BindException: Permission denied (Bind failed) <null>:80
	at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:413)
	at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:715)
	at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:452)
	at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
	at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
	at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:642)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:667)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
Caused by: java.net.BindException: Permission denied (Bind failed)
	at java.net.PlainSocketImpl.socketBind(Native Method)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
	at java.net.ServerSocket.bind(ServerSocket.java:390)
	at java.net.ServerSocket.<init>(ServerSocket.java:252)
	at java.net.ServerSocket.<init>(ServerSocket.java:196)
	at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
	at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:400)
	... 17 more

这是由于linux的安全限制引起的:

1. 启动时,使用sudo xxx

2. 修改端口映射,如iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

一般如果使用负载均衡,tomcat的端口号都不会使用80.

 

延伸问题:

有的项目可能需要设置JAVA_OPTS,方法如下:

修改/etc/profile

export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"

内存大小可以按个人喜好设定。

编码个人是建议UTF-8,不然很容易中文乱码,根据具体项目决定。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值