Web应用单点压力测试调优-第4季

 

调整5-Tomcat的启动JVM参数

首先先启动JMX远程端口,修改catalina.sh

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

 

吞吐量和上次测试差不多。

对内存走势如下图

 

 

 

 

 


Web应用单点压力测试调优-第4季
 

 

总共堆大小是系统的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图形如下

 

 


Web应用单点压力测试调优-第4季
 其中堆内存图形如下

 


Web应用单点压力测试调优-第4季
 

避免了FullGC

走势图


Web应用单点压力测试调优-第4季
 依然有不连续的偏离量,报告如下

 

 

 

 

 

 

 



 

 

系统更多的时间依然是在wa%上花费了不少。(注:此时jmx监控也会吃掉一些系统的性能)

 

 

 

为了突出此问题,将并发量上升到1500,准备时间5s

 

 

 

走势图

 


Web应用单点压力测试调优-第4季
 吞吐量报表

 



 

 

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远程监控图形如下


Web应用单点压力测试调优-第4季
 

 

压力测试走势图


Web应用单点压力测试调优-第4季
 报表

 

 

 



 

TPS基本维持在30左右。

 

经此调试,看来之前的主要瓶颈还是在数据库上。topus%平均基本维持在70%~80%,而wa%基本维持在25%~40%之间。

 

调整7-不引入第三方工具软件情况下的优化

修改相关程序和配置清单(后续会将完整优化文件内容附上)

 

程序:调整逻辑-循环跳跃,由i++变为i=i+2,减少循环次数
数据库配置:优化连接池和一些buffer
程序连接池增大
修改JDBC连接参数,优化URL链接选项
继续修改并优化JVM参数
修改tomcat连接器参数
给主表外键简历normal的btree索引
关闭图形启动界面

 

 

经过多伦调优,此次是1500并发,连续加压6次,准备时间是23s


Web应用单点压力测试调优-第4季
 6次走势图如下


Web应用单点压力测试调优-第4季
 吞吐量报告,稳定后TPS基本维持在36~40



 

(未完待续)

 

标记:18页

各项配置:

 

my.cnf

之前

 

你可能感兴趣的:(java,jvm,tomcat,linux,调优)