前段时间开发了一个数据上报的系统,
1、内存调优:
打开jetty根目录下的bin/jetty.sh文件,修改配置项JAVA_OPTIONS的配置即可。我这里使用的是如下配置,大家可以进行参考:
JAVA_OPTIONS="-server -Xms6G -Xmx6G -Xmn2G -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=5 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=85 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
我这里设置的最大内存占用为6G,最小内存占用2G。注意:这个值需要你根据自己的服务器内存来进行配置。
2、配置jetty的线程池:
当系统的内存和性能够用的时候,我们可以修改jetty的最大线程数来实现提高单台系统的最高并发,可以修改etc/jetty.xml配置文件中的如下值:这里配置的最大线程数为600
3、观察线上环境性能图:
---我这里使用的是javamelody插件来进行分析
内存图:通过查看该图的内存最大值为6G,也就是我们配置的最大值,且自动进行垃圾回收后,占用内存值下降明显
活动线程图:从这里的活动线程图可以看到,最大值为我们配置的600,当然,这里的活动线程数为600并不代表能抗住的并发只有600,这里出现了活动线程数占用如此之多,只是因为有一次出现了kafka被运维配置错误的情况...正常情况下,并发值再高,活动线程数一般是稳定在100之下的。
请求统计图:这里是实时统计请求数的图,因为用户量还不是很多,这里的最高值也只有20k+,内网测试500M内存200个线程并发能达到70K+,因为线上服务器没敢轻易尝试。
请求并发量:这个值我一直在纠结,该系统的内网用200个线程压,吞吐量为1k+/s左右,但是江湖传闻,可以使用netstat命令来查看某个端口的并发量,故则测试环境同样用200个线程压,使用netstat命令查看并发结果如下:8K+,内网..,这个系统能抗住的并发量我到底还是没有办法压出来,只知道吞吐量为1800/s左右。当然,如果扛不住就分布式,至少现在没有出现扛不住的情况,只是希望好心人能告诉我如何测试系统能抗住的最高并发的方式,感谢!
共同学习,写下你的评论
评论加载中...
作者其他优质文章