最近很多人对JTRY的具体性能表示好奇,于是本人准备使用apache-jmeter 性能测试工具对本架构的每一项功能的性能做综合测试
首先测试的是本架构HTTP数据处理API的实际使用效能,为了起到对比的作用,我也使用功能类似的Spring MVC一起加入测试
测试工具:apache-jmeter-3.1
操作系统:Centos 6.4
JAVA版本:jdk-8u121-linux-x64
应用服务器:apache-tomcat-9.0.0.M17
测试客户端:CPU I7-3770K 3.50GHz | 内存 16GB DDR3 1600Mhz | 网络 本地局域网 1Gbps
服务器宿主机:CPU E5-2670 2.60Ghz | 内存 32GB DDR3 1600Mhz | 磁盘 RAID 1 希捷 5400转 机械硬盘 X 2
JTRY虚拟机:CPU 1核心2线程 | 内存 2GB
SpringMVC虚拟机:CPU 1核心2线程 | 内存2GB
创建maven项目jtrytest
配置pom引用
<dependencies>
<dependency>
<groupId>org.jtry</groupId>
<artifactId>framework</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
按照JTRY规范编写web.xml、controller
<servlet>
<servlet-name>CentralController</servlet-name>
<servlet-class>org.jtry.framework.net.http.CentralController</servlet-class>
<init-param>
<param-name>controllerConfigClass</param-name>
<param-value>org.jtry.test.init.WebInit</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CentralController</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
@Path("test")
public class TestController {
@Ajax
@Path("string")
public String testString(@Mark("text") String text) {
return text;
}
@Ajax
@Path("int")
public int testInt(@Mark("num") int num) {
return num;
}
@Ajax
@Path("array")
public int[] testArray(@Mark("array") int[] array) {
return array;
}
@Ajax
@Path("bean")
public User testBean(User user) {
return user;
}
}
实体类如下
public class User {
private String name;
private Integer age;
private Double money;
private String phone;
private String regTime;
发布到JTRY虚拟机tomcat,开始测试
Jmeter中建立线程组
1000个线程,每个线程运行500次,共计50万次
然后针对controller中的4个接口分别编写GET方式与POST方式的请求
调用/test/string接口
用GET方式,运行52秒,结果如下
用POST方式,运行49秒,结果如下
调用/test/int接口
用GET方式,运行58秒,结果如下
用POST方式,运行57秒,结果如下
调用/test/array接口
用GET方式,运行1分5秒,结果如下
用POST方式,运行1分8秒,结果如下
调用/test/bean接口
用GET方式,运行41秒,结果如下
用POST方式,运行41秒,结果如下
创建maven项目springtest
配置pom引用
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
</dependencies>
按照Spring MVC规范编写web.xml、SpringMVC.xml、controller
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/SpringMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context:component-scan base-package="org.springmvc.test.controller" />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
@Controller
@RequestMapping("test")
public class TestController {
@ResponseBody
@RequestMapping("string")
public String testString(String text) {
return text;
}
@ResponseBody
@RequestMapping("int")
public int testInt(int num) {
return num;
}
@ResponseBody
@RequestMapping("array")
public int[] testArray(int[] array) {
return array;
}
@ResponseBody
@RequestMapping("bean")
public User testBean(User user) {
return user;
}
}
实体类如下
public class User {
private String name;
private Integer age;
private Double money;
private String phone;
private String regTime;
发布到SpringMVC虚拟机tomcat,开始测试
Jmeter中建立线程组
1000个线程,每个线程运行500次,共计50万次
然后针对controller中的4个接口分别编写GET方式与POST方式的请求
调用/test/string接口
用GET方式,运行2分24秒,结果如下
用POST方式,运行2分6秒,结果如下
调用/test/int接口
用GET方式,运行2分36秒,结果如下
用POST方式,运行2分12秒,结果如下
调用/test/array接口
用GET方式,运行2分46秒,结果如下
用POST方式,运行2分45秒,结果如下
调用/test/bean接口
用GET方式,运行2分43秒,结果如下
用POST方式,运行2分37秒,结果如下
结果非常明显,无论是映射字符串、数值、数组还是javabean,JTRY的性能都比较优秀
当然,spring MVC在对全部类型的映射效能上十分平均,而且其支持的功能范围也更广更细
最后再一起运行下全部的测试用例,共计使用1000个线程发起400万次请求,评判下综合速率
调用JTRY服务接口,运行12分40秒,结果如下
调用Spring MVC服务接口,运行20分37秒,结果如下