最近在新搭服务器,顺便就小记一下
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,不然很容易中文乱码,根据具体项目决定。