欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单点网站压力测试调优-第1季

程序员文章站 2022-05-23 18:30:42
...

 

环境介绍

虚拟机配置

 

 

 

 

操作系统  Centos6-64位
(内核版本: Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
CPU  (英特尔)Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz(2601 MHz),虚拟单核
主板  联想 23442G1
内存  1.00 GB (1600 MHz)
主硬盘  20 GB 
网卡  Intel(R) 82579LM Gigabit Network Connection

 

软件

JDK版本:

java –version

 

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

 

 

Tomcat版本:

 

Apache Tomcat/7.0.50

 

Mysql版本(编译好的解压缩版本):

 

mysql-5.6.15-linux-glibc2.5-x86_64

 

测试工具:JMeter

 

应用:Story网站

 

使用框架

 

Jquery+Fastjson1.1.38+Spring MVC3+Spring Core3+Hibernate4+C3P0

 

新闻贴子初始数据量(1w

 

测试功能:

 

分散浏览分页浏览新闻(按页分散,每页15条记录)

 

分散浏览单条新闻(id随机分散,每条记录约1kb信息)

 

并发更新新闻 (id随机分散,行锁定)

 

并发插入新闻(id随数据库生成自增,暂不考虑分布式横向sharding)

 

要解决的问题:

 

如何分散浏览?

 

使用jmeter的随机函数,打开jmeter后,点击“选项”->“函数助手对话框”->弹出对话框,选择“__Random”函数,第一个参数是随机数最小值,第二个参数是随机数最大值,第三个参数是压力测试中随机函数的函数名称。之后点击生成,

如图:


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 

则形成如下表达式:

 

${__Random(1,10,ram)}

 

之后可以在压力测试中有随机数的地方使用它了。

 

一切都是默认配置,发起压力测试

 

JVMtomcat 连接参数、mysql、程序配置、操作系统等等皆为默认配置,测试用例功能性能。暂时不开启远程JMX监控端口,出现问题后,在开启JMX监控之。

Mysql默认配置如下

[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
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

log-bin=mysql-bin

binlog_format=mixed

server-id	= 1

[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

 程序连接池配置入下

 

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8
jdbc.user =root
jdbc.password=111111
jdbc.miniPoolSize=10
jdbc.maxPoolSize=80
jdbc.initialPoolSize=10
jdbc.maxIdleTime = 120000
jdbc.acquireIncrement=10
jdbc.acquireRetryAttempts = 30
jdbc.acquireRetryDelay=60000
jdbc.testConnectionOnCheckin = true
jdbc.automaticTestTable = test
jdbc.idleConnectionTestPeriod = 15000
jdbc.checkoutTimeout=60000

 

 

2.1分散浏览帖子

 

并发100,准备时间1s

 

测试报告如下:

 

预热环境,稳定下来后的吞吐量如图


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 平均数值如下


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 

吞吐量TPS基本维持在29~31之间。

 

并发200,准备时间1s

走势图


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 

吞吐量报告

 


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 

TPS基本也是维持在29~32之间。

 

并发500,准备时间1s,让它产生少量的等待请求

 

第一次发起,出现过多的错误,出现在http连接超时、数据库连接超时、数据库连接不够用、http response返回信息错误等等现象。

 

经过第一次的预热,第二次发起

走势图如下


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 吞吐量报告


单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
 短间隔内(一些对象池都没有回收的情况下),连续发起请求,TPS基本维持在29~31左右

下次发起1000并发调优~(未完待续)

记录,自我总结文档的第5页

  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 36.4 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 18.7 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 11.2 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 20.5 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 10.3 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 22.1 KB
  • 单点网站压力测试调优-第1季
            
    
    博客分类: 经验总结 javatomcatjvmmysql调优 
  • 大小: 9.5 KB