好久不用Windchill了,近日接到一个朋友的紧急电话,有一个客户遇到了性能问题,非常着急,希望我能去帮忙解决,由于周末就两天时间,太短了,只好硬着头皮去了现场(好在原来优化过很多项目,心里还是很自信的),毕竟两年不用Windchill了,想不到一摸到系统,还是有种很熟悉的感觉,毕竟和我朝夕相处了八年啊。。。

 

由于时间紧,周六上午过去,周日晚上还要赶回上海,时间搞的相当紧张。下面是这次调优的记录:

 

现状

由于用户数据量和注册用户数近两年来的增加,系统性能逐渐变慢,尤其是流程任务处理方面,主要表现在:

1. 提交一个零部件(带4个文档)的审批,页面需要10多秒钟才能完成,而且每个审批环节都如此,如果数据量多的话,性能更是慢的不堪忍受。

2. 虽然在去年增加了32G内存,但是这些内存都没有被充分利用

3. 搜索功能性能也不如以前。

分析

1. 检查流程队列,发现只使用了一个队列,所有的任务都在排队处理,当出现数据集中提交的时候,会出现堵塞的情况,尤其是当一个任务出现异常而停顿的时候,其他任务都不能得到及时处理。所以需要增加多个队列。

2. 据用户反映,原来也考虑过增加队列,但是发现签名会出现混乱的情况。经过反复检查代码,发现是由于所有流程的签名文件都叫“signature.txt”造成的,一个队列时,只会有一个进程写该文件,多个队列时,当碰巧多个进程都写该文件时,必然会引起混乱。此问题必须通过修改代码才能实现

3. 检查如下三个流程的时候:**零部件签审流程、**图样单独签审流程,**文档签审流程,发现页面处理逻辑和系统操作逻辑混在一起,造成用户点击“任务完成”按钮的时候,系统需要进行大量的操作,造成用户等待时间非常长,用户体验非常差。此问题必须通过修改流程解决,将页面处理逻辑放在“User Task”里面,而其他操作放在“表达式自动机”里面(用户之前也考虑过该处理方式,但是由于表达式里面不能取到正确的审核者而作罢)。

4. 系统一共使用的内存比两年前并没有增大多少,总共使用的内存大概只有8G左右,而整个服务器的内存已经增加到了32G,需要增加系统可使用的内存。

5. 检查系统日志,并没有发现特殊的错误,和性能有关的只发现“java.net.SocketException: 没有进程来读取写入管道的数据。”错误。该错误需要增加“wt.method.rmi.maxSockets”的大小来解决。

采取的措施

两年前,当系统用户数少的时候,数据量相应的也在一个合理的水平,系统的性能是可以满足要求的,但是目前各种数据量已经增加很多,尤其是数据库已经增加到了36G,如果再不进行调优,那系统将会面临很大的性能问题,尤其是在流程方面,用户的增多,导致系统需要处理的任务也大量增加,单个队列已经远远不能满足要求。

如下图,图1表示调优前的状况,图2表示调优后的状况。

 

现状

由于用户数据量和注册用户数近两年来的增加,系统性能逐渐变慢,尤其是流程任务处理方面,主要表现在:

1. 提交一个零部件(带4个文档)的审批,页面需要10多秒钟才能完成,而且每个审批环节都如此,如果数据量多的话,性能更是慢的不堪忍受。

2. 虽然在去年增加了32G内存,但是这些内存都没有被充分利用

3. 搜索功能性能也不如以前。

分析

1. 检查流程队列,发现只使用了一个队列,所有的任务都在排队处理,当出现数据集中提交的时候,会出现堵塞的情况,尤其是当一个任务出现异常而停顿的时候,其他任务都不能得到及时处理。所以需要增加多个队列。

2. 据用户反映,原来也考虑过增加队列,但是发现签名会出现混乱的情况。经过反复检查代码,发现是由于所有流程的签名文件都叫“signature.txt”造成的,一个队列时,只会有一个进程写该文件,多个队列时,当碰巧多个进程都写该文件时,必然会引起混乱。此问题必须通过修改代码才能实现

3. 检查如下三个流程的时候:**零部件签审流程、**图样单独签审流程,**文档签审流程,发现页面处理逻辑和系统操作逻辑混在一起,造成用户点击“任务完成”按钮的时候,系统需要进行大量的操作,造成用户等待时间非常长,用户体验非常差。此问题必须通过修改流程解决,将页面处理逻辑放在“User Task”里面,而其他操作放在“表达式自动机”里面(用户之前也考虑过该处理方式,但是由于表达式里面不能取到正确的审核者而作罢)。

4. 系统一共使用的内存比两年前并没有增大多少,总共使用的内存大概只有8G左右,而整个服务器的内存已经增加到了32G,需要增加系统可使用的内存。

5. 检查系统日志,并没有发现特殊的错误,和性能有关的只发现“java.net.SocketException: 没有进程来读取写入管道的数据。”错误。该错误需要增加“wt.method.rmi.maxSockets”的大小来解决。

采取的措施

两年前,当系统用户数少的时候,数据量相应的也在一个合理的水平,系统的性能是可以满足要求的,但是目前各种数据量已经增加很多,尤其是数据库已经增加到了36G,如果再不进行调优,那系统将会面临很大的性能问题,尤其是在流程方面,用户的增多,导致系统需要处理的任务也大量增加,单个队列已经远远不能满足要求。

如下图,图1表示调优前的状况,图2表示调优后的状况。

image

clip_image003[4]

 

image

调优以后的性能

1. 用户完成任务由原来的10秒以上,缩短到1~2秒

2. 增加队列数量为10个后,单个流程任务的处理并没有提高多少,但是由于增加了队列数量,当出现大量任务的时候,性能最快可以提高到10倍。

3. 整体性能的提高:由于增加了整个应用可使用的内存,并且优化了负载平衡的参数,使得处理复杂任务的能力得到提高。

4. 虽然内存并没有使用到全部的32G,但是考虑到该机器上还装有其他系统,所以需要保留一部分,并且调配的内存(18G左右)已经足够使用。

附录:

调整前后参数对照表:

Oracle

参数

原始值

修改值

备注

share pool size

608

1200

buffer size

800

1952

large pool

80

192

pga

600

1200

总计

2088

4544

Windchill

参数

原始值

修改值

备注

method server可用内存

1280

3000

最大最小值改成一样

back ground method server可用内存

1280

3000

同上

server manager可用内存

512

512

同上

wt.cache.size.WTPrincipalCache

500

1200

wt.method.rmi.maxSockets

2000

3000

wt.workflow.engine.userWorkPoolSize

10

wt.workflow.engine.propagationPoolSize

10

wt.queue.max.processQueues

无(默认12)

50

wt.queue.execEntriesCount

12

wt.manager.serverSelector.MethodServer

wt.manager.StandardServerSelector

修改程序

ext.**.workflow.WF.java

修改流程

流程名称

原始使用版本

修改后的版本

**零部件签审流程

23

以2010.8.2号修改版本为准

**图样单独签审流程

12

以2010.8.2号修改版本为准

**文档签审流程

17

以2010.8.2号修改版本为准

 

图2:调优后的系统状况

调优以后的性能

1. 用户完成任务由原来的10秒以上,缩短到1~2秒

2. 增加队列数量为10个后,单个流程任务的处理并没有提高多少,但是由于增加了队列数量,当出现大量任务的时候,性能最快可以提高到10倍。

3. 整体性能的提高:由于增加了整个应用可使用的内存,并且优化了负载平衡的参数,使得处理复杂任务的能力得到提高。

4. 虽然内存并没有使用到全部的32G,但是考虑到该机器上还装有其他系统,所以需要保留一部分,并且调配的内存(18G左右)已经足够使用。

附录:

调整前后参数对照表:

Oracle

参数

原始值

修改值

备注

share pool size

608

1200

buffer size

800

1952

large pool

80

192

pga

600

1200

总计

2088

4544

Windchill

参数

原始值

修改值

备注

method server可用内存

1280

3000

最大最小值改成一样

back ground method server可用内存

1280

3000

同上

server manager可用内存

512

512

同上

wt.cache.size.WTPrincipalCache

500

1200

wt.method.rmi.maxSockets

2000

3000

wt.workflow.engine.userWorkPoolSize

10

wt.workflow.engine.propagationPoolSize

10

wt.queue.max.processQueues

无(默认12)

50

wt.queue.execEntriesCount

12

wt.manager.serverSelector.MethodServer

wt.manager.StandardServerSelector

修改程序

ext.**.workflow.WF.java

修改流程

流程名称

原始使用版本

修改后的版本

**零部件签审流程

23

以2010.8.2号修改版本为准

**图样单独签审流程

12

以2010.8.2号修改版本为准

**文档签审流程

17

以2010.8.2号修改版本为准

posted on 2010-08-04 10:37  重金属  阅读(2000)  评论(0编辑  收藏  举报