Table of Contents
第二个问题:Tomcat JDBC Connection not enough的问题
第三个问题:Postgresql too many clients 的问题
本次测试是针对部署在云服务上的单个service的性能测试,此service是整个业务逻辑服务的其中一环。
服务器背景介绍
整个service架构如下
数据库: postgresql
后端框架: spring boot + embbed tomcat + java
部署环境:某一个知名的云平台
性能测试方法
测试工具:jemeter
测试思路:使用jemeter测试,分别针对不同的需要测试的api创建test plan。每个test plan有两个变量
- 线程数
- 数据量
每一个test plan分别起10,20,50,100,200个线程同时运行.分别在数据库数据量大致为一万,五万,十万,二十万,五十万时候运行。一共会产生25组结果,表格如下
数据量(单位:万) | 线程数(单位:个) | 并发运行时间(单位:分钟) |
1 | 10 | 5 |
5 | 20 | 5 |
10 | 50 | 5 |
20 | 100 | 5 |
50 | 200 | 5 |
在jemeter当中,我们可以填写启动的线程数,运行的时间,测试数据等。界面如下:
下面是一个test plan的xml代码实例
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="3.2" jmeter="3.3 r1808647">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Get by customerNumber with markets defaultAddress" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">true</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Get by customerNumber with markets defaultAddress" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<intProp name="LoopController.loops">-1</intProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<longProp name="ThreadGroup.start_time">1515376034000</longProp>
<longProp name="ThreadGroup.end_time">1515376034000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.duration">300</stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="&#