Linux下Tomcat 端口占用/耗时久/浏览器无法访问/无法关闭tomcat 解决办法

1.tomcat启动失败:端口占用

1.查看端口号占用

netstat -aux|grep '项目端口号'

​ tomcat启动时要启动两个端口,一个默认8005的端口,用于关闭tomcat,一个默认8080的端口,用于启动tomcat,去server.xml修改掉被占用的端口即可。

2.tomcat启动成功:耗时很久

​ tomcat7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID。Linux中的随机数可以从两个特殊的文件中产生:

​ /dev/urandom:非阻塞的随机数产生器(unlocked),他会反复使用熵池中的数据来产生伪随机数,如果不能产生新的随机数时,不会阻塞。因此随机数产生效果不太好。

​ /dev/random:阻塞随机数产生器(locked),他会反复使用熵池中的数据来产生伪随机数,如果不能产生新的随机数时,会阻塞,直到能产生新的随机数才返回。因此随机效果好。

​ 因此只需要把,随机数产生文件从/dev/random修改为/dev/urandom即可。

修改Tomcat启动参数,在catalina.sh中加入这么一行,重启tomcat启动速度就会变快。

-Djava.security.egd=file:/dev/./urandom 

3.tomcat启动成功:浏览器无法访问

1.检查端口号

ps -aux|grep '项目端口号'

如果能看到对应的进程,就表示真的启动成功,否则查看tomcat日志

2.检查本地是否可以访问tomcat

curl http://localhost:'项目端口号'

如果可以看到html文本信息即内网可以访问tomcat

3.检查防火墙

systemctl status firewalld

如果防火墙状态为active (running),执行以下命令关闭防火墙

systemctl stop firewalld

4.tomcat关闭失败:进程残留

​ 关闭tomcat需要做两件事,一是释放tomcat进程的资源释放,二是杀死tomcat进程。无法正常关闭的原因可能是tomcat容器中servlet占用程序未释放。

​ 因此解决办法也有两种,一是查询tomcat进程号然后强行杀死进程:

​ 手动杀死进程

##手动操作
ps -aux|grep '项目端口号'
kill 进程号

​ 自动杀死进程

##修改catlina.sh脚本
##在PRGDIR=`dirname "$PRG"`下面一行设置catalina_pid
if [ -z  "$CATALINA_PID" ]; then
	CATALINA_PID=$PRGDIR/CATALINA_PID
	cat $CATALINA_PID
fi

##修改shutdown脚本
##最后一行修改为:
exec "$PRGDIR"/"$EXECUTABLE" stop -force "$@"

​ 二是,自定义监听器,释放servlet所占用的资源

public class ResListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        //TODO:初始化资源
    }

    // 释放资源,否则容器无法正常关闭
    public void contextDestroyed(ServletContextEvent sce) {
        //TODO:释放资源
    }
}

你可能感兴趣的:(Linux下Tomcat 端口占用/耗时久/浏览器无法访问/无法关闭tomcat 解决办法)