Tomcat参数调优包括日志、线程数、内存【转】
【Tomcat中日志打印对性能测试的影响】
一般都提供了这样5个日志级别:
▪ Debug
▪ Info
▪ Warn
▪ Error
▪ Fatal
由于性能测试需要并发进行压力测试,如果日志级别是info或者debug就会严重影响系统的性能,磁盘IO读写和网络会造成瓶颈,所以性能测试或者上线系统的日志级别需要修改为WARN或者ERROR,日志文件为/tomcat/apache-tomcat-7.0.40/webapps/HSEAP/WEB-INF/conf/ log4j.properties;
【Tomcat中线程数对性能测试的影响】
Tomcat的文件需要进行调优设置,文件为./apache-tomcat-7.0.40/conf/server.xml
以上参数主要是用来前台连接数,最大为600,最小为25,当连接超过400时就开始有效释放链接,最大链接超时时间为20000(这个不是唯一的,需要修改这几个参数进行几次压力测试找到系统最优的线程数和连接数大小)。
Maxthreads可创建的最大线程数,minsparethreads初始线程数,maxsparethread创建的线程数超过该数时自动关闭不再需要的socket线程;connectiontimeout连接超时时间。
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
【JVM的设置】
在./apache-tomcat-7.0.40/bin/catalina.sh中第一行增加:JAVA_OPTS="-server -Xms1024m - Xmx2048m -XX:PermSize=128M -XX:MaxPermSize=256m"
由于Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的使用内存即可解决此问题。一般是这样设置,出现内存问题再根据实际情况进行调整,Xms和Xmx可以设置一样的值。
-Xmx :Java Heap最大值,默认值为物理内存的1/4。
-Xms :Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值。
-Xmn :Java Heap Young区大小,不熟悉最好保留默认值。
-Xss :每个线程的Stack大小,不熟悉最好保留默认值。
-XX:PermSize :设定内存的永久保存区域。
-XX:MaxPermSize :设定最大内存的永久保存区域。
-XX:PermSize :设定内存的永久保存区域。
-XX:NewSize :设置JVM堆的‘新生代’的默认大小。
-XX:MaxNewSize :设置JVM堆的‘新生代’的最大大小。
▲堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64。VM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行堆内存设置,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值,建议堆的最大值设置为可用内存的最大值的80%。
初始化堆的大小是JVM在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果JVM启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,JVM就必须重复地增加内存来满足使用。
由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时JVM就会提示内存溢出,并且导致应用服务崩溃。所以,如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。
▲非堆内存分配
也叫永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域。它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理。JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 GC不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
▪ OutOfMemoryError: Java heap space 堆溢出。
内存溢出主要存在问题就是出现在这个情况中。当在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
▪ OutOfMemoryError: PermGen space 非堆溢出(永久保存区域溢出)。
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
所以为了避免上述2个OutOfMemoryError问题的出现,设置JVM的大小就是非常有必要的。
转自
web性能测试前调优设置,你知道多少?
http://www.toutiao.com/i6471429094465602061/
Tomcat参数调优包括日志、线程数、内存【转】的更多相关文章
- tomcat参数调优
		
在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError等.这是个让开发人员很痛苦.也很纠结的问题,因为我们有时不知道什么样的操作导致了这种问题的发生.所 ...
 - tomcat 参数调优
		
JAVA_OPTS="-Xms2g -Xmx2g -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath= ...
 - MapReduce任务参数调优(转)
		
http://blog.javachen.com/2014/06/24/tuning-in-mapreduce/ 本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优 ...
 - MapReduce参数调优
		
原文链接:http://blog.javachen.com/2014/06/24/tuning-in-mapreduce/ 本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Ya ...
 - 【nginx】nginx配置文件结构,内置变量及参数调优
		
Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...
 - spark 资源参数调优
		
资源参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了.所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使 ...
 - spark参数调优
		
摘要 1.num-executors 2.executor-memory 3.executor-cores 4.driver-memory 5.spark.default.parallelism 6. ...
 - spark submit参数调优
		
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
 - SpringBoot-内部运行jvm参数调优
		
SpringBoot JVM参数调优 这个根据服务器的内存大小,来设置堆参数. -Xms :设置Java堆栈的初始化大小 -Xmx :设置最大的java堆大小 实例参数-XX:+PrintGCDeta ...
 
随机推荐
- 第86天:HTML5应用程序标签和智能表单
			
一.HTML5应用程序标签 1.datalist需要数据载体 input list属性指向数据源 2.progress进度条 -webkit-appearance: none; /*如果要改默认样 ...
 - EL语法 ${person.id} 这里面的id指的是实例对象的成员变量
			
EL语法 ${person.id} 这里面的id指的是实例对象的成员变量
 - 【bzoj4006】[JLOI2015]管道连接  斯坦纳树+状压dp
			
题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...
 - 秒杀多线程第八篇 经典线程同步 信号量Semaphore (续)
			
java semaphore实现: Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用.Java 并发库 的Semaphore 可以很轻松完成信号 ...
 - 表单验证2-JS正则
			
1. JS正则: 以/开头,以/结尾. test作用:到里面去找,只要里面有,就返回true:否则就返回false. 例如:rep=/\d+/; 检验里面是否有数字. 2.rep=/^ $/; ...
 - 【bzoj4002】有意义的字符串
			
Portal --> bzoj4002 Solution  虽然说这题有点强行但是感觉还是挺妙的,给你通项让你反推数列的这种==有点毒  补档时间  首先有一个东西叫做特征方程,我们可以 ...
 - 网络编程----socketserver多并发实现、FTP上传多并发、udp协议套接字多并发
			
一.socketserver多并发 基于tcp的套接字,关键就是两个循环,一个 ...
 - Hexo之我的桌角女友的食用方式
			
秀秀 通过使用一个名为 hexo-helper-live2d 的开源库,可以轻松的在自己的Hexo网站下贴上一只生猛可爱的萌妹子或主子: 什么是live2d Live2d是11区宅男们开发出的虚拟女友 ...
 - Spring MVC入门示例
			
1.新建一个Java Web项目 2.导入jar包 3.在WEB-INF下面建一个hello.jsp页面. <%@ page language="java" import=& ...
 - springMVC参数绑定与数据回显
			
简单例子:修改商品信息的jsp页面: 参数绑定过程: 1.2.1 默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. 1.1.1 HttpServletReq ...