0
点赞
收藏
分享

微信扫一扫

Kotlin:runBlocking导致App应用出现ANR问题实例

guanguans 03-16 08:00 阅读 4
tomcatjava

文章目录

Tomcat会话保持

1、代理服务器配置

  • 安装nginx服务(地址:192.168.10.11)
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

yum install -y epel-release.noarch
#安装yum额外源

yum install -y nginx
#安装nginx

systemctl start nginx
#开启nginx服务

systemctl status nginx
#查看nginx服务状态

#修改配置文件
vim /etc/nginx/nginx.conf
 upstream tomcat {
    server 192.168.10.12:8080;
    server 192.168.10.13:8080;
    }
#在http模块下添加upstream,负载均衡
location ~* \.jsp$ {
        proxy_pass http://tomcat;
        }
#在server模块下添加location,反向代理

nginx -t
#检查语法

nginx -s reload
#重新加载配置文件

image-20240315100919339

image-20240315134914384

2、web服务器配置

  • 安装tomcat(web1地址:192.168.10.12)
  • 安装tomcat(web2地址:192.168.10.13)
web1和web2相同配置

systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

(1)部署jdk
#将需要的jdk二进制包上传

tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local
#将二进制包解压到/usr/local目录

cd /usr/local/
#切换目录

ln -s jdk1.8.0_291/ jdk
#做软连接

#修改环境变量
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre   
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

. /etc/profile.d/jdk.sh
#运行

java -version
#查看版本

(2)安装tomcat
#将需要的tomcat二进制包上传

tar xf apache-tomcat-9.0.16.tar.gz 
#解压到指定目录

cp -r apache-tomcat-9.0.16 /usr/local/
#复制

cd /usr/local
#切换目录

ln -s apache-tomcat-9.0.16/ tomcat
#做软连接

useradd -M -s /sbin/nologin tomcat
#新建用户

chown tomcat:tomcat /usr/local/tomcat/ -R
#修改属主和属组

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
   
systemctl daemon-reload
#重新加载配置

systemctl start tomcat
#开启服务

systemctl status tomcat
#查看tomcat服务状态

cd /usr/local/tomcat/webapps/ROOT
#切换目录

mv index.jsp index.jsp.bak
#改名

#编辑或者上传Java测试脚本,随机生成sessionID
cat index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
  • web1服务器配置(地址:192.168.10.12)

image-20240315135424778

image-20240315135649256

image-20240315135832303

image-20240315142932010

  • web2服务器配置(地址:192.168.10.13)

image-20240315140419908

image-20240315140915724

image-20240315141000400

image-20240315143246794

  • 访问验证
192.168.10.11/index.jsp
#使用主机访问,每刷新一次,sessionID会发生改变

image-20240315143506995

3、会话保持

3.1 方法一:修改代理服务器配置(nginx)
#修改配置文件
vim /etc/nginx/nginx.conf
hash $remote_addr;
#在upstream模块下添加此行配置内容($remote_addr表示存放客户端的地址)

nginx -t
#检查语法

nginx -s reload
#重新加载配置文件

image-20240315144117920

  • 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID不会再发生改变,实现会话绑定

#这种方法有缺陷,会话实现绑定之后,web服务器也不会发生改变,会永远绑定在该web服务器上

image-20240315144406951

3.2 方法二:修改web服务器配置(tomcat)
  • 适用于后端服务器比较少的场景
访问官方文档,查看需要添加的配置文件
#官方文档
https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

#在配置文件/usr/local/tomcat/conf/server.xml中只需要将Receiver里面的address修改为本机的ip地址,除此之外不需要修改,粘贴到配置文件中即可
For the impatient
The following is the default cluster configuration: 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      #此处修改为本机的ip地址
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>


#在配置文件/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中添加<distributable/>配置内容
Cluster Basics
Make sure your web.xml has the <distributable/> element
#如果使用web.xml,需要添加<distributable/>功能
  • 查看官方文档

image-20240315145741214

image-20240315150348814

修改tomcat服务配置
cd /usr/local/tomcat/conf
#切换目录

#修改配置文件
vim server.xml
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.10.12"
                      #address="192.168.10.13"
                      #修改为本机的ip地址
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>


cd /usr/local/tomcat/webapps/ROOT/WEB-INF
#切换目录

#修改配置文件
vim web.xml
  </description>
<distributable/>
#在此处添加此行配置内容
</web-app>

systemctl restart tomcat
#重启服务
  • web1服务器配置(地址:192.168.10.12)

image-20240315151141956

image-20240315153715657

image-20240315151452524

image-20240315154450473

  • web2服务器配置(地址:192.168.10.13)

image-20240315153254450

image-20240315153209550

image-20240315153416541

image-20240315154420198

  • 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID保持不变,实现会话绑定,web服务器依旧切换

image-20240315154256730

举报

相关推荐

0 条评论