tomcat调优

前言

遇到一个问题,一台机器上启动tomcat占用内存太多


提示:以下是本篇文章正文内容,下面案例可供参考

一、tomcat优化配置参数

1.1 jvm内存

优化内存,主要是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加:

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

• -server:启用jdk的server版本。
• -Xms:虚拟机初始化时的最小堆内存。
• -Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
• -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
• -XX:MaxNewSize:新生代占整个堆内存的最大值。
• -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。

1.1.1错误提示:java.lang.OutOfMemoryError:Java heap space

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Outof Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的-Xms和-Xmx即可解决问题,通常将-Xms和-Xmx设置成一样,堆的最大值设置为物理可用内存的最大值的80%。

set JAVA_OPTS=-Xms512m-Xmx512m

1.1.2 错误提示:java.lang.OutOfMemoryError: PermGenspace

PermGenspace的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。解决方法:

set JAVA_OPTS=-XX:PermSize=128M

1.1.3 垃圾回收机制

在使用-Xms和-Xmx调整tomcat的堆大小时,还需要考虑垃圾回收机制。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

1.2 连接数优化

#优化连接数,主要是在conf/server.xml配置文件中进行修改。

1.2.1、优化线程数

找到Connector port=“8080” protocol=“HTTP/1.1”,增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:
<Connector port=“8080” protocol="HTTP/1.1"connectionTimeout=“20000” redirectPort="8443"acceptCount=“500” maxThreads=“400” />
其中:
• maxThreads:tomcat可用于请求处理的最大线程数,默认是200
• minSpareThreads:tomcat初始线程数,即最小空闲线程数
• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100

1.2.2、使用线程池

在server.xml中增加executor节点,然后配置connector的executor属性,如下:

<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

其中:
• namePrefix:线程池中线程的命名前缀
• maxThreads:线程池的最大线程数
• minSpareThreads:线程池的最小空闲线程数
• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
• threadPriority:线程优先级
注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:
• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001
• lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数
• 使用命令:ulimit -a 查看每个用户允许打开的最大文件数

tomcat调优-占用内存太多相关推荐

  1. zz温故知新:Tomcat调优JVM内存性能调优

    Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1. ...

  2. Tomcat调优和JVM优化

    title: Tomcat调优和JVM优化 date: 2018-7-22 19:27:56 tags: [Tomcat,Java,JVM] categories: [JVM] Tomcat本身优化 ...

  3. Tomcat调优主要内容如下

    一.Tomcat调优主要内容如下: 1.增加最大连接数 配置过Tomcat的同学,应该都知道这个配置,好多地方也建议你,把这个配置调到最大(1000),如果服务器本身的性能允许的话 - maxThre ...

  4. jvm与Tomcat调优【详解】——有这一篇就够了

    jvm与Tomcat调优 一.JVM性能调优 1.1 什么是JVM? 1.2 JVM调优工具 1.3 JVM调优经验 1.4常用JVM参数参考: 1.5 Java文件编译的过程 1.6 为什么说jav ...

  5. Tomcat调优总结

    Tomcat 优化分为系统优化,Java虚拟机调优,Tomcat本身的优化. Tomcat 如何起停 ./catalina.sh stop ./catalina.sh start /sbin/serv ...

  6. tomcat调优之启动参数

    https://blog.csdn.net/xiaoyi23000/article/details/79448769 Linux系统中tomcat的启动参数 export JAVA_OPTS=&quo ...

  7. Tomcat 调优的技巧

    描述 最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优 都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录, ...

  8. Linux下的Tomcat调优

    Liunx下Tomcat调优指南 1 概述 由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述. 2 调优方案 1.1 外部环境调优 1) ...

  9. Tomcat调优教程

    TIPS 本文基于Tomcat 9.0编写,理论兼容Tomcat 8.x及更高版本. Tomcat调优参数 主要调优参数 在做Tomcat的调优时,最重要是就是Connector(连接器)的调优了(少 ...

最新文章

  1. 这位90后女博导上热搜了!曾被Nature主编点赞,放弃百万英镑年薪回国任教
  2. 将matpoltlib绘制好的图片从内存中取出
  3. pmp考试中容易混淆的22组概念
  4. Smalidea无源码调试 android 应用
  5. python语言format用法_python基础_格式化输出(%用法和format用法)
  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-1.单机和分布式应用的登录检验讲解...
  7. 树链剖分解析---WYD
  8. 高等数学课后答案上册同济大学第七版第一章答案
  9. 后端学习路线的书籍经验总结
  10. PS2接口键盘、鼠标改成USB接口
  11. 常见图片分类及适用场景
  12. java程序设计 试题_在清算期间支付额不确定的年金是: A.返还年金 B.变额年金 C.即期年金 D.既定年金...
  13. android 手机红外遥控器
  14. 请在mysql配置文件修sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
  15. 英语语法:名词性从句讲解
  16. 扫雷的一个简单实现 - C语言
  17. arduino 操作stm32
  18. 5分钟学会如何制样(XPS测试)
  19. 根据前台设计数据库--首页篇
  20. 微信域名检测是否被封的检测api接口

热门文章

  1. updated beforeUpdate() Updated() 生命周期-销毁阶段 vue的nextTick@stage3---week2--day4-1
  2. 2.语法特性(组合数据类型)
  3. Keil中代码前进后退跳转快捷键修改
  4. autograd-自动求导系统
  5. Linux中常用的tar解压打包命令语法介绍
  6. 《发现你的心灵》——于丹
  7. 数据库——sql server安装教程
  8. 线性电阻电路方程的建立方法
  9. web安全学习-sql注入-针对mysql的攻击
  10. 面部识别法案正式通过?微软总裁赞不绝口——华盛顿州重大突破!