某项目1
一.项目1问题及解决:
问题:
1.测试环境与上线环境不一致
2.Socket.AMF,HTTP相关接口的性能差
3.测试发现TPS不稳定,且web服务器有四核,每次测试有一核cpu占100%,其它三核空闲。
解决:
1.建议测试环境与上线环境一致,所有服务都建在linux环境下
2.缓存优化
3.学习了如何查看表是否是innodb,db修改成innodb的形式
4.db三种变量在my.conf中修改才比较长期有效
5.tomcat自带的manager管理程序不运行时也占cpu25%
6.解决2的真正原因:数据库连接池都修改大了就ok了
修改jvm: (解决:测试发现TPS不稳定,且web服务器有四核,每次测试有一核cpu占100%,其它三核空闲)
catalina.sh JAVA_OPTS='-Xms6096m -Xmx6096m -XX:+UseCompressedOops -XX:+UseParallelGC -XX:ParallelGCThreads=4' 修改为:
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -Xmn512M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -
XX:-Xss128k-Xloggc:log/gc.log ";
7.修改成:curl, 把php程序中fsocketopen方式修改成curl(结果tps提高很多,响应时间也变短了)
看是否用了ehcache(目录/WEB-INF/spring-servlet.xml)
8.修改ehcache.xml(把相应待测试接口的cache相应修改长,最后得出tps不稳定,cache是一个原因)
9.socket的性能改进,优化了程序(一个是测试数据符合流程,另一个是网络连接管理),TPS提高很多
以下是程序的优化:
压力测试中修改项:
1.jvm内存管理调优
JAVA_OPTS='-Xms3596m -Xmx5596m -XX:+UseCompressedOops -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Xloggc:log/gc.log'
设置jvm内存回收策略,即时小量垃圾回收,解决大量用户并发访问时内存增长过快,jvm的默认垃圾回收时导致的性能降低,性能波动过大。
2.数据库连接池从最大300加到最小800,最大1900。
3.登陆会话session保存的用户对象调整大小,之前保存的是完整用户信息的对象,调整为只保存用户id的小对象,减小大量用户登录时的session内存占用。
4.使用java的EHCache缓存部分查询,因为是tomcat进程内的缓存,且机器内存为8G,目前查询缓存设置时间为2分钟,缓存命中率还有待提高。之后会用MC分布式缓存扩充缓存的内存大小。
5.应用接口优化。sql语句优化。
6.socket服务测试中碰见的问题有:
6.a. socket连接没有关闭,服务端要做好异常的socket连接管理,及时关闭异常连接。
6.b. socket消息流程问题.在按业务流程测试的时候,如果出现非正常流程的消息,服务端如果不
做错 误通知的话,测试就会卡住,压力上不去。
解决办法是做好错误通知提示,这样测试端才能及时响应。另外要配置好测试数据,
保证流程相关 数据的正确性。
6.c.socket粘包问题。测试脚本需要处理服务端的多个应用协议包返回及半包返回的情况。
7.amf接口测试问题
需要注意amf1.0和amf3.0的差异。(conn.setObjectEncoding(0);,这个注释掉就是默认的新的amf3)
8.操作系统参数优化
9.数据库参数优化
10.应用服务器配置调优
二.测试结论:
经过程序优化后,问题解决,测试达到预期,测试通过!
阅读(1197) | 评论(0) | 转发(0) |