首页 > 其他分享 >2020-8-5-tomcat优化

2020-8-5-tomcat优化

时间:2024-03-22 17:12:59浏览次数:26  
标签:xml tomcat 添加 线程 str 2020 优化

tomcat安装与配置、优化内容、JMeter、JVM字节码

tomcat安装与配置

官网下载后上传到服务器

$ tar -xvf apache-tomcat-8.5.57.tar.gz

1)修改用户

$ vi conf/tomcat-users.xml
  <role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="manager,manager-gui,admin,admin-gui"/>

2)修改配置文件

$ viMETA-INF/context.xml
[root@localhost META-INF]# cat context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
  <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />--><!--注释掉-->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

3)启动

回到包内的bin目录下

$ ./startup.sh

优化内容

1AJP(Appache JServer Protocol)

WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期会重用连接。但多数情况下我们使用的是Ngingx+tomcat架构,所以用不着AJP协议,需要禁用。在tomcat配置文件xml找到8009端口的配置,注释掉即可。优化后吞吐量得到提升。

<!--<Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />--><!--进行注释-->

2执行器(线程池)

使用执行器提高性能,修改配置文件conf/server.xml,打开注释

<Executor name="tomcatThreadPool" namePrefix="catalina-exec=" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
<!--配置生效,但页面上会显示最大连接数为-1-->

<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<!--连接器指向执行器-->

优化后吞吐量提升,平均响应时间减少

1)增大线程池的线程数

并不是线程数越大性能越高

2)增大最大等待队列数

吞吐率提高,响应时间减少,但错误率提高了(12306的处理方式)

33中运行模式

1)bio

默认的io方式,性能低

2)nio

非阻塞的io方式,性能较高

3)apr

从操作系统级别来解决异步io的问题,大幅提示性能

设置运行模式为nio,性能得到提升

        <Connector port="8080" protocol="org.appache.coyote.http11.http11Nio2Protocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />

4优化JAVA虚拟机

1)增大堆内存

2)使用G1垃圾回收器


JMeter

1一般步骤

创建测试计划

添加线程组

添加HTTP请求

添加查看结果数

添加聚合报告

添加用表格查看结果

2其他说明

每次启动前都要清空上一次的结果


JVM字节码

1)将字节码文件内容输出到文本文件中

$ javap -v test1.class >test1.txt

2)查看字节码内容

第一部分:生成这个class的java源文件、版本信息、生成时间

第二部分:该类中锁涉及到的常量池

第三部分:显示该类构造器,源码未定义构造器,编译器会自动生成

第四部分:main方法的信息

3)i++与++i的区别

i++表示先返回再+1,++i表示先+1再返回

4)字符串拼接效率

    public void m1(){
        String str="";
        for (int i = 0; i <5 ; i++) {
            str=str+i;
        }
        System.out.println (str);
    }
    public void m2(){//效率高
        StringBuilder str=new StringBuilder ();
        for (int i = 0; i <5 ; i++) {
            str.append (i);
        }
        System.out.println (str);
    }

5)代码优化

(1)尽可能使用局部变量

临时变量保持在栈中速度快,随方法运行结束而销毁,不需要额外垃圾回收

(2)尽量减少变量的重复运算

for(int i=o;i<list.size();i++)
{}

替换成

int size=list.size();
for(int i=o;i<size;i++)
{}

(3)尽量采用懒加载策略

String str="aaa";
if(i==1){
    list.add(str);
}

替换成

if(i==1){
    String str="aaa";
    list.add(str);
}

(5)不要将数组声明未public static final

(6)不要创建一些不使用的对象,不要导入一些不使用的类

(7)程序运行过程中避免使用反射

(8)使用数据库连接池和线程池

(9)容器初始化时尽可能指定长度

(10)ArrayList遍历快,LinkList添加删除快

(11)使用Entry遍历Map

(12)不要受到调用System.gc()

(13)String尽量少用正则表达式

(14)对资源的close()分开操作

标签:xml,tomcat,添加,线程,str,2020,优化
From: https://www.cnblogs.com/sylvesterzhang/p/18089864

相关文章

  • 2020-7-28-并发编程
    概述、生产者消费者模型、锁对象、集合的线程安全问题、Callable的使用、计数器、队列、线程池、ForkJoin、异步回调、单例模式、CAS、锁概述1多线程下变量访问存在问题变量访问不可见性2JMM特点所有共享变量存于主内存中每个线程有自己的工作内存线程对变量的操作都必须在......
  • 2020-8-9-JAVA机考题
    二叉排序数及中序遍历实现,socket应用,日志模拟的实现试题一/***实现要求:*1、根据已有的代码片段,实现一个二叉排序树;*2、用中序遍历输出排序结果,结果形如:0,1,2,3,4,5,6,7,8,9,*3、注意编写代码注释*/publicclassBinaryTree{ publicstaticvoidmain(String[]a......
  • 2020-8-6-JVM虚拟机
    运行时数据区域、溢出、垃圾收集、问题解决运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域1)程序计数器(1)一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器(2)字节码解释器工作时就是通过改变这个计数器的......
  • 2020-8-12-Spring-Security
    资源访问控制方式、认证流程、授权流程、快速开始、授权案例、自定义登陆登出页面、会话管理、基于方法的授权资源访问控制方式基于角色的访问控制Role-BasedAccessControl基于资源的访问控制(常用)Resource-BasedAccessControl认证流程UsernamePasswordAuthenticatio......
  • 2020-2-11-Angular
    Amgular安装、插件安装、新建组件、组件编写、双向绑定、服务、ViewChild、组件间通信、声明周期函数、异步编程、路由、模块化实现懒加载安装npminstall-g@angular/cli查看版本ngv创建项目//在filedir中创建项目,并安装依赖ngnewfiledir//在filedir中创建项目,......
  • 2020-1-31-Typescript基础知识
    typescript安装、编译、数据类型、函数声明、ES5中的类、TS中的类、接口、泛型、装饰器Typescript安装npminstalll-gtypescript编译成jstscaaa.ts执行该命令后会自动生成js文件在VScode中设置保存后自动编译1.生成tscconfig.json文件tsc--init2.修改tscconfig.......
  • 2020-2-17-mongodb的使用
    下载地址、安装、启动服务、查看、创建数据库及表、新增数据、删除数据、更新数据、查询数据、索引下载地址http://dl.mongodb.org/dl/win32/x86_64下载名为mongodb-win32-x86_64-2012plus-v4.2-latest-signed.msi的文件安装点击下一步,跳过安装mangodb_compass启动服务mo......
  • 3D模型优化服务+三维可视化+数字孪生+元宇宙=眸瑞科技
    眸瑞科技:老子云平台+AMRT3D数字孪生引擎老子云概述老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。平台架构平台特性1、基于HTML5......
  • 2020-3-1-jsonp原理
    原理ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,将数据作为参数,在src中进行了调用,这样实现了跨域。实现代码1服务端//nodejsvarhttp=require......
  • 2020-2-26-koa框架使用
    快速上手、路由、动态路由、获取get值、中间间、koa-views使用、ejs小结、利用中间体配置公共变量、获取post数据、静态web服务、koa-art-template使用、cookies使用、session使用、mongodb数据库封装、路由模块化案例、快速创建koa项目koa-generator快速上手1安装npminstall......