一、项目情况
项目名称 | Elearning |
调优过程 | 定位出应用程序存在非线程安全代码 增加jboss ajp connector 线程数 调整jvm 参数 调整DBCP 连接池参数 调高 log4j日志阀值减少IO |
问题积累 | |
最终结论 | 耗费在增加http header、定位非线程安全以及dbcp连接参数不当时间最昂贵。本次性能测试与调优涉及多个层面,定位性能瓶颈依赖平常的知识积累,只要拆分模块得当,定位瓶颈有模式可以遵循。为了排查瓶颈是否在数据库要DBA协助。 另外,碰到问题,google是一流的帮手! |
资源消耗 | 历时2周 |
二、执行中问题与解决方案
I类问题(已解决):
编号 | 问题描述 | 解决方法 |
1 | 手工执行功能成功,但vugen执行脚本服务器响应返回0字节 | 利用嗅探器ethereal发现手工执行与vugen执行脚本的差异,增加web_add_auto_header("modeltype","model"); 解决问题后,经咨询东软开发工程师,服务器端解析输入代码有 if ("model".equals(webRequest.getHeader("ModelType"))) |
2 | Contoller Insufficient records for param X in table to provide the Vuser with unique data | 删除根盘目录 Local Settings\Temp下文件,排除干扰 |
3 | 并发执行时,发现服务器随机错误,确认有非线程安全代码 | 在客户端、服务器端分别用嗅探器(fiddler , ethereal, tcpdump )确认发包、收包的状况,确认发包正确,服务器HttpRequest接收到的包也正确。故程序出现在内部变量未做到线程同步 |
4 | Apache error_log : [error] server reached MaxClients setting, consider raising the MaxClients setting | 在httpd.conf增加: StartServers 10 MinSpareServers 10 MaxSpareServers 15 ServerLimit 3000 MaxClients 2000 MaxRequestsPerChild 10000 KeepAliveTimeout 30 并重启httpd服务 |
5 | java.lang.OutOfMemoryError: PermGen space、java.lang.OutOfMemoryError: unable to create new native | 调整JVM,增加堆、栈控制等参数。最终 Run.conf: JAVA_OPTS="-Xms1536m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=512m -Xss256k -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" |