话说刘姥姥虽然听说过很多次性能测试,但一直没有机会到性能测试园子里转转,结识一下性能测试园的哥儿们,姐儿们。今天好不容易有机会,就想着来开开眼见,长长进识。想自己活了这么大年纪了,终于有机会认识一下那含玉而生的公子哥儿,更是眼口鼻都快凑一块儿了。
哇,园子这么大,哥儿们姐儿们这么多,刘姥姥有点心慌,把自己念叨了一路的问题怯生生地说了出来,生怕哪们哥儿姐儿一嗤鼻儿,把自己给踢出园去。
刘姥姥09:19:15
请把tomcat的优化设置逐项列出来,形成正规文档。
开发让列TOMCAT优化内容
宝玉09:19:17
强啊
刘姥姥09:19:49
什么强??我都不参加测试,怎么知道如何优化呢?
宝玉09:20:22
可以的
宝玉09:20:30
我还巴不得我们这边的开发提这样的需求
刘姥姥09:20:52
这也算需求?你测试的时候自己调就行了
宝玉09:21:41
那不行
刘姥姥09:21:50
除了JVM,和连接数,还要调整什么啊?我不太清楚
宝玉09:21:53
测试就是测试,我可以告诉你怎么调,但我不能直接调
刘姥姥09:22:27
这是第三方验证要求开发提供的.开发不会,直接让我去调.
刘姥姥09:22:53
而我认为这个东西不是死的,一定调到多少就是最优化的,那我怎么给个确定的值呢?
宝玉09:22:59
测试啊
宝玉09:23:04
通过测试来确定
宝玉09:23:10
这个东西肯定不是死的
刘姥姥09:23:18
我给了值,人家第三方做完性能测试,就定论了
宝玉09:23:26
性能最优就是各个部分达到平衡
刘姥姥09:23:28
那有我再调整的机会呢
宝玉09:23:39
那就得你测试呀
宝玉09:23:54
通过测试定出个最优的值来,然后再交给第三方验收啊
刘姥姥09:23:55
不是我测试啊,是第三方机构测试啊
宝玉09:24:03
晕了
宝玉09:24:07
不知道你们是个什么关系
宝玉09:24:17
第三方是个验收吧
刘姥姥09:24:24
第三方测试
宝玉09:24:29
但你们给出去的东西要保证是最好的是吧
刘姥姥09:24:50
我们给出的东西,2月份测试过,有问题,但还是给出去了,
刘姥姥09:25:39
象JVM,我都不知道服务器有多少内存,怎么知道要给JVM多少呢? 开发就一句话.我就空写吗?
宝玉09:26:12
那怎么测试的
刘姥姥09:26:13
我自己内部测试过,但环境相差太远,没有什么参考价值了
刘姥姥09:28:02
现在就是,第三方测试,结果不好.开发就说TOMCAT没有调优.第三方就说,那你说吧,改成什么?我们再测
刘姥姥09:45:55
给个参考吧.不要说一定调成多少.就说哪些能调,大致的范围是怎么样
秦钟09:47:00
你写个很学术的东西
比如说影响JAVA程序性能的原因,以及各参数影响到哪些
刘姥姥09:49:18
我就写TOMCAT的就行了吧.其它不理它
秦钟09:49:27
然后就说,JAVA性能调优是一个系统的、复杂的工作,需要根据软件在具体硬件上的具体表现来调整
宝玉09:49:34
是的
秦钟09:49:35
调整可能需要进行多次
宝玉09:49:45
不可能给一个确定的值的
宝玉09:50:04
这个要跟你的硬件,其它的组件相关的
刘姥姥09:50:04
真是高难度啊
宝玉09:50:07
很明显是这样的
秦钟09:50:48
本来就跟硬件和你的软件架构(主要是调用关系,以及内存申请、释放……)有关
所以说是一个系统的工作嘛
刘姥姥11:01:50
TOMCAT的参数调整:
首先TOMCAT的调整的前提是程序没有问题。
一、 调整JVM
Sun的JVM应该是多数情况下的第一选择。在满足项目要求的前提下可以选用版本较高的JVM版本,一般来说高版本产品在速度和效率上比低版本会有改进。
由于Jvm系统垃圾收集机制的存在,在高负载情况下如果能根据系统的具体要求有效的调整最优化堆的大小,也可以起到一定优化作用。
JVM有两个参数:
参数 描述
-Xms<size> JVM初始化堆的大小
-Xmx<size> JVM堆的最大值
如果堆设置较大,则GC次数变少,但每次花费较长时间,从而导致系统处理能力抖动较大;如果堆设置较小,则GC变得频繁,虽然对系统性能影响较小,但频繁的GC也会耗费系统资源。
而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。
二、 调整线程数:
属性名 描述
maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
connnectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
minSpareThreads Tomcat初始化时创建的线程数。
maxSpareThreads一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
线程数可以大致上用“同时在线人数*每秒用户操作次数*系统平均操作时间”来计算。
最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所有人的web站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。
刘姥姥11:02:24
线程数可以大致上用“同时在线人数*每秒用户操作次数*系统平均操作时间”来计算。
这个怎么算的?
宝玉11:04:40
就这样算啊,有问题吗
刘姥姥11:04:53
系统平均操作时间是什么意思?
宝玉11:06:25
就是处理的平均时间吧,不可能给得很准确,只是大致的估算
宝玉11:06:32
最好的方法还是通过测试来确定
刘姥姥11:07:15
每秒用户操作次数是什么?
宝玉11:07:40
就是每秒的连接吧
操作tomcat主要就体现在连接数上
刘姥姥11:08:30
那不直接看看测试结果,连接数有多少不就行了
宝玉11:09:15
你不是想确定这个线程数设多少好吗
刘姥姥11:09:22
是啊,
宝玉11:09:26
我就说了,通过测试的方式来确定是最好了
刘姥姥11:09:34
好,
我就这样写
OH,有点醒悟了。
原来啊!TOMCAT调优是要达到平衡,不能只往一处死劲调。
JAVA性能调优是一个系统的、复杂的工作,需要根据软件在具体硬件上的具体表现来调整。不能乱给确定值的,刘姥姥一直以为象种南瓜一样呢?到那里种都差不多。
还要通过测试的方式确定连接数,不断地进行调整。真是和种南瓜有点不一样呢。
尤其是那个秦钟,不但教我怎么调,还教我怎么写文档,主子才会喜欢。是啊,想想,这次带的南瓜只是用麻袋装着,是有点难看了。下次得在麻袋上绣几朵花。
刘姥姥觉得不仅解决了自己的难题,还学会了做人的道理,心里想:到底是性能测试园,就是不一样,不过今天那些姐儿们都没有搭理自己,是问题不够专业?还是自己家种的南瓜不好吃?看来下次要带点别的来。