Web应用单点压力测试调优-第4季
程序员文章站
2022-05-23 18:42:32
...
调整5-Tomcat的启动JVM参数
JAVA_OPTS="-XX:PermSize=120M -XX:MaxPermSize=120M -Xss265k -Xms430m -Xmx430m -Xmn185m -Xverify:none -XX:MaxTenuringThreshold=50 -XX:+UseFastAccessorMethods -XX:+UseAdaptiveSizePolicy -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.137.233"
发起1200并发测试,准备时间9s
吞吐量和上次测试差不多。
对内存走势如下图
总共堆大小是系统的1/4左右,年轻代复制算法清理时间10秒。标记整理则使用了26秒之多。
经多次调试(让内存曲线较为稳定),修改JVM参数,catalina.sh文件内容更改如下
JAVA_OPTS="-server -XX:PermSize=120M -XX:MaxPermSize=120M -Xss265k -Xms430m -Xmx430m -Xmn80m -Xverify:none -XX:MaxTenuringThreshold=50 -XX:+UseFastAccessorMethods -XX:+UseAdaptiveSizePolicy -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.137.233"
1200并发,6s准备时间,JMX图形如下
其中堆内存图形如下
避免了FullGC。
走势图
依然有不连续的偏离量,报告如下
系统更多的时间依然是在wa%上花费了不少。(注:此时jmx监控也会吃掉一些系统的性能)
为了突出此问题,将并发量上升到1500,准备时间5s。
走势图
吞吐量报表
JVM内存图形表示比较稳定,在此不列出图形。
瓶颈基本锁定在Mysql数据库。
调整6-修改Mysql配置参数
my.cnf修改配置如下
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 16M max_allowed_packet = 1M myisam_sort_buffer_size = 8M log-bin=mysql-bin binlog_format=mixed server-id = 1 #update start max_connections=1500 query_cache_size=32M default-storage-engine=INNODB #table_cache=256 tmp_table_size=8M thread_cache_size=8 read_buffer_size=64K read_rnd_buffer_size = 256K net_buffer_length = 16K table_open_cache = 256 sort_buffer_size = 512K innodb_additional_mem_pool_size=2M innodb_flush_log_at_trx_commit=0 innodb_log_buffer_size=8M innodb_buffer_pool_size=32M innodb_log_file_size=128M innodb_thread_concurrency=1 #update over [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
1500并发,准备时间5s
JMX远程监控图形如下
压力测试走势图
报表
TPS基本维持在30左右。
经此调试,看来之前的主要瓶颈还是在数据库上。top后us%平均基本维持在70%~80%,而wa%基本维持在25%~40%之间。
调整7-不引入第三方工具软件情况下的优化
修改相关程序和配置清单(后续会将完整优化文件内容附上)
程序:调整逻辑-循环跳跃,由i++变为i=i+2,减少循环次数 数据库配置:优化连接池和一些buffer 程序连接池增大 修改JDBC连接参数,优化URL链接选项 继续修改并优化JVM参数 修改tomcat连接器参数 给主表外键简历normal的btree索引 关闭图形启动界面
经过多伦调优,此次是1500并发,连续加压6次,准备时间是23s
6次走势图如下
吞吐量报告,稳定后TPS基本维持在36~40
(未完待续)
标记:18页
各项配置:
my.cnf
之前
上一篇: 百度分词技术和算法分析