谈谈tomcat的优化经验

2023-11-11

第一次写博客,搜集了很多的优化经验,然后自己归纳下来,大概有7条,没涉及到的欢迎大家补充
1.优化方法:
加大tomcat使用的jvm的内存
具体操作:
Tomcat默认可以使用的内存为128MB,可在配置文件或环境变量里增加使用内存。在配置文件中:通过配置tomcat的配置文件(Windows下的catalina.bat或Linux下的catalina.sh),在前面增加设置JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存] 。也可以设置环境变量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化栈内存大小] -Xmx[可以使用的最大内存]” 
原因:
减少内存溢出的情况,减少频繁分配堆而降低性能,减少gc次数,所以服务器可以更多关注处理web请求,并要求尽快完成。

2.优化方法:
解决JRE内存泄漏
具体操作:
更新到最新版本的Tomcat来获得较好性能和可扩展性。如果我们使用最新的 因为它包含一个监听器来处理 JRE 和 permgen 内存泄漏。
原因:
减少内存泄露的出现

3.优化方法:
线程池设置
具体操作:
maxThreads的值应该根据流量的大小,如果值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。在server.xml中的connector标签里设置最大线程数
原因:
线程池指定Web请求负载的数量,因此,为获得更好的性能这部分应小心处理。

4.优化方法:
利用缓存和压缩
具体操作:
采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存
原因:
其一,对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。其二,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。

5.优化方法:
采用集群
具体操作:
采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。
原因:
单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。

6.优化方法:
去掉对web.xml的监视
具体操作:
context.xml中增加<WatchedResource>WEB-INF/web.xml</WatchedResource>
原因:
Eclipse在修改了web.xml后将自动更新到tomcat服务器中,不需要重启服务器了

7.优化方法:
将jsp提前编辑成servlet
具体操作:
在服务器下运行时,把jsp都打开一遍
原因:
jsp和servlet的编译时期不一样。使用myeclipse等工具创建的servlet在部署在tomcat时就已经被编译成.class文件了,而jsp被部署到tomcat时还没有被编译。当tomcat启动,第一次访问jsp页面时,jsp才会被编译成servlet,进而被编译成.class文件。

文章若有不当之处,欢迎评论指出~
如果喜欢我的文章,欢迎关注知乎专栏Java修仙道路~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈tomcat的优化经验 的相关文章

  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • Javadoc 1.5 和 1.6 中缺少 enum.valueOf(String name)

    这可能是一个愚蠢的问题 但我正在使用该方法enum valueOf String name 那里没问题 只是当我检查 javadoc 以了解有关此方法的更多信息时 我找不到它 有javadoc用于valueOf Class
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • firebase推送通知错误Spring Boot服务器端

    我正在尝试从 Spring Boot 服务器端发送通知到客户端 android 服务器运行良好 一切都很好 2020 09 01 08 13 07 691 INFO 18941 restartedMain e DevToolsPropert
  • 初级 Java 计数器代码

    我的教授希望我这样做 使用下面的 Counter 接口写入多个可互换计数器 public interface Counter Current value of this counter int value Increment this co
  • 如果基于 Spring 注解的控制器位于 jar 文件内,则该控制器无法工作

    我的子模块中有一些基于注释的控制器 这些模块作为 jar 文件部署 jar 文件中基于注释的控制器未加载到 spring 配置中 我使用 Eclipse 中的导出实用程序手动导出 jar 文件 有人遇到过这个问题吗 当您使用 Eclipse
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • 打印 jasper 文件时执行报表 SQL 语句时出错

    我修改了一个旧项目 但无法确定这段代码有什么问题 使用下面的 jrxml它创造 jasper文件 当我打印 jasper 文件时 使用此代码JasperPrint jasperPrint JasperFillManager fillRepo
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • 使用Java开发跨平台,不同平台字体缩放不同

    我正在为我的大学制作一些软件 需要一个 GUI 在它的第一个版本中 我让它使用系统外观 因此它看起来像 Linux Mac Windows 中的本机应用程序 我发现这很麻烦 因为我必须根据操作系统使所有 JLabel 具有不同的大小 无论分
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 是否可以为 azure blob 存储中的给定目录生成具有写入权限的 SAS(共享访问签名)

    我们的 blob 存储帐户结构 容器名称 simple 在这个容器内我们有 blob aa one zip aa two zip bb ss zip bb dd zip 是否可以生成对aa 目录 有写权限 但对bb 目录 没有访问权限的SA
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 无法映射 ftl 文件中的 jsonRequest 属性

    我想在 FTL 文件中映射下面的 json 文件市场和子市场字段 但是当我尝试下面的代码时 它没有映射 有人可以帮助我吗 我从 2 天开始就无法映射它 Json请求 ProcessOrderRequest prevalidationMode
  • 使用 Runtime.getRuntime().exec() 进行重定向不起作用

    我需要从程序执行命令 命令行是可以的 我在终端试了一下 但是在程序中不行 我从我的代码中添加一个副本 File dir new File videos String children dir list if children null Ei
  • 如何在java 1.8中从org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8转换为oracle.jdbc.OracleConnection

    如何在 java 1 8 中从 org jboss jca adapters jdbc jdk8 WrappedConnectionJDK8 转换为 oracle jdbc OracleConnection 目前我正在这样使用并得到以下异常

随机推荐

  • 通过方法引用获取方法名

    在学习Mybatis plus时 可以通过getter方法的方法引用来获取到对应的字段名 LambdaQueryWrapper
  • vue前端下载——jszip压缩和解压,结合file-saver导出图片zip,每20个图片分一个目录

    使用jszip和file saver导出图片 并打包为zip import JSZip from jszip import FileSaver from file saver 一 jszip解压缩 使用loadAsync zipFile为压
  • 侧信道攻击

    1 侧信道攻击简介 侧信道攻击中所指的侧信道信息一般为这几种 声音 温度 功耗 电磁 色彩 等等 这些信息叫做侧信道信息是因为 在加密硬件进行加密的时候 上述的信息只是加密过程中附带产生的一些物理量 这些物理量不会对加密提供任何好处 而天才
  • OSI七层模型、TCP/IP四层模型(超详细!!!!!)

    OSI七层模型 七层模型 亦称OSI Open System Interconnection 参考模型是国际标准化组织 ISO 制定的一个用于计算机或通信系统间互联的标准体系 一般称为OSI参考模型或七层模型 它是一个七层的 抽象的模型体
  • Matlab_day_3

    Matlab矩阵的表示 1 矩阵的建立 1 直接输入法 如 lt
  • AIGC 基础,从VAE到DDPM 原理、代码详解

    作者 王建周 编辑 汽车人 原文链接 https zhuanlan zhihu com p 607117094 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 AIGC 技术交流群 一 前言 A
  • yolov5 训练一半中断,如何重连

    resume python train py xxx resume last pt
  • 用ENVI为风云三号VIRR地表温度LST日产品添加头文件(地理信息)

    上一篇文章中我们介绍了怎么用ENVI查看风云三号VIRR地表温度LST日产品的属性 下面介绍怎么用ENVI将该产品从HDF格式转换成ENVI标准格式 2019 1 7更新 有小伙伴说头文件中的datum设置成unknown才可以和他的其他矢
  • 【Google drive】【Colab】引用同级下的.py文件

    ps 1 drive后稍等片刻左侧目录会刷新 2 上传文件格式为 ipynb能够直接打开编辑 py文件只读模式
  • 1-5、Lua函数

    1 5 Lua函数 文章目录 1 5 Lua函数 5 1 多返回值 5 2 可变参数 5 3 命名参数 函数有两种用途 1 完成指定的任务 这种情况下函数作为调用语句使用 2 计算并返回值 这种情况下函数作为赋值语句的表达式使用 语法 fu
  • ffmpeg批量转换ape为mp3

    1 新建一个txt文件 并复制如下代码进入 然后保存 echo off title cd d dp0 for a in ape do ffmpeg i sa y acodec libmp3lame aq 0 na mp3 pause 2 把
  • 批量重命名:删除文件名相同的部分或指定的部分

    本代码提供两个函数 1 用于批量重命名文件 重命名时 删除 路径 下的文件名中含有 重复名 的部分 重命名删除同义名 路径 重复名 例如 删除 Image001 png Image002 png Image003 png 中的 Image
  • [Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择

    从本系列文章开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前五篇文章讲解了神经网络基础概念 Theano库的安装过程及基础用法 theano实现回归神经网络 theano实现分类神经网络 theano正规化处理 这
  • DS1302时钟模块

    DS1302结构原理图 DS1302涓流充电计时芯片实时时钟 日历和31字节的静态RAM 通过IO口与微机处理器通讯 该实时时钟 日历提供年月日和时分秒星期 还具备月份闰平年自动校正 其信息与外部的传输由CE I O和SCLk 串行时钟 决
  • 数据库聚合函数

    1 常用函数 常用函数这里就不过多的阐述和演示 大家感兴趣的话 可以去官网看 官网地址 MySQL Developer Zone 我们主要讲聚合函数 2 聚合函数 聚合函数是我们经常使用的函数 常用聚合函数名称 描述 1 count 计数
  • MySQL从安装到精通(多表)

    目录 1 创建练习环境 1 1创建一个部门表 1 2创建一个员工表 2 多表查询的分类 2 1mysql 表子查询 2 1 1什么是子查询 subquery sql 2 1 2 单行子查询 2 1 3多行子查询 2 1 2 多列子查询 2
  • 【python】如何把你的python包发布出去(pip install)

    python 如何把你的python包发布出去 pip install 介绍 实际上分为两步 打包 发布 我们要发布的网站是https pypi org 也就是用户通过pip install XXX 就可以安装你的包 1 通过setupto
  • python环境的安装(Windows)

    步骤一安装 打开python官网https www python org 点击Downloads 选择Windows进入后根据自己的电脑是32位还是64位 右击此电脑属性查看 选择相应的版本下载 注意 要选择Windows installe
  • 【2023硅谷数模笔试题】~ 题目及参考答案

    本章目录 0 前言 1 题目 答案 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 声明 0 前言 哈喽 二舅 最近和你们一样 不断被鞭策 今天抽个小空给大家带来的是前几天做的一套笔试题 名称如标题
  • 谈谈tomcat的优化经验

    第一次写博客 搜集了很多的优化经验 然后自己归纳下来 大概有7条 没涉及到的欢迎大家补充 1 优化方法 加大tomcat使用的jvm的内存 具体操作 Tomcat默认可以使用的内存为128MB 可在配置文件或环境变量里增加使用内存 在配置文