- 浏览: 2652599 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
Scene
a、本次性能测试,测试了dubbo2.0所有支持的协议在不同大小和数据类型下的表现,并与dubbo1.0进行了对比。
b、整体性能相比1.0有了提升,平均提升10%,使用dubbo2.0新增的dubbo序列化还能获得10%~50%的性能提升,详见下面的性能数据。
c、稳定性测试中由于将底层通信框架从mina换成netty,old区对象的增长大大减少,50小时运行,增长不到200m,无fullgc。(可以确认为mina在高并发下的设计缺陷)
d、存在的问题:在50k数据的时候2.0性能不如1.0,怀疑可能是缓冲区设置的问题,下版本会进一步确认。
Environment
2.1 硬件部署与参数调整
主机/ip
硬件配置
操作系统及参数调整
10.20.153.11 | 机型 | Tecal BH620 | |
CPU | model name : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz cache size : 8192 KB processor_count : 16 | ||
内存 | Total System Memory: 6G Hardware Memory Info: Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown | ||
网络 | Total System Memory: 6G Hardware Memory Info: Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown | ||
磁盘 | /dev/sda: 597.9 GB, | 2.6.18-128.el5xen x86_64 | |
10.20.153.10 | 机型 | Tecal BH620 | |
CPU | model name : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz cache size : 8192 KB processor_count : 16 | ||
内存 | Total System Memory: 6G Hardware Memory Info: Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown Size: 4096MB, 1066MHz(0.9ns) Size: NoModule, Unknown | ||
网络 | eth0: Link is up at 1000 Mbps, full duplex. peth0: Link is up at 1000 Mbps, full duplex. | ||
磁盘 | /dev/sda: 597.9 GB, | 2.6.18-128.el5xen x86_64 |
2.2 软件架构
主机/ip
软件名称及版本
关键参数
java version "1.6.0_18" Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode) | -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 | |
jboss-4.0.5.GA | ||
httpd-2.0.61 | KeepAlive On MaxKeepAliveRequests 100000 KeepAliveTimeout 180 MaxRequestsPerChild 1000000 <IfModule worker.c> StartServers 5 MaxClients 1024 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 64 ThreadLimit 128 ServerLimit 16 </IfModule> |
Purpose
3.1 期望性能指标 ( 量化 )
场景名称
对应指标名称
期望值范围
实际值
是否满足期望(是/否)
1k数据 |
响应时间 |
0.9ms |
0.79ms |
是 |
1k数据 |
TPS |
10000 |
11994 |
是 |
3.2 期望运行状况 ( 非量化,可选 )
2.0性能不低于1.0,2.0和1.0互调用的性能无明显下降。 除了50k string其余皆通过
JVM内存运行稳定,无OOM,堆内存中无不合理的大对象的占用。通过
CPU、内存、网络、磁盘、文件句柄占用平稳。通过
无频繁线程锁,线程数平稳。通过
业务线程负载均衡。通过
Script
1、性能测试场景(10并发)
a、传入1kString,不做任何处理,原样返回
b、传入50kString,不做任何处理,原样返回
c、传入200kString,不做任何处理,原样返回
d、传入1k pojo(嵌套的复杂person对象),不做任何处理,原样返回
上述场景在dubbo1.0\dubbo2.0(hessian2序列化)\dubbo2.0(dubbo序列化)\rmi
\hessian3.2.0\http(json序列化)进行10分钟的性能测试。
主要考察序列化和网络IO的性能,因此服务端无任何业务逻辑。取10并发是考虑到http协议在高并发下对CPU的使用率较高可能会先打到瓶颈。
2、并发场景(20并发)
传入1kString,在服务器段循环1w次,每次重新生成一个随机数然后进行拼装。
考察业务线程是否能够分配到每个CPU上。
3、稳定性场景(20并发)
同时调用1个参数为String(5k)方法,1个参数为person对象的方法,1个参数为map(值为3个person)的方法,持续运行50小时。
4、高压力场景(20并发)
在稳定性场景的基础上,将提供者和消费者布置成均为2台(一台机器2个实例),且String的参数从20byte到200k,每隔10分钟随机变换。
Result
5.1 场景名称: pojo 场景
TPS成功平均值 |
响应时间成功平均值(ms) |
|
dubbo1 (hessian2序列化+mina) |
10813.5 |
0.9 |
dubbo2 (hessian2序列化+netty) |
11994 |
0.79 |
dubbo2 (dubbo序列化+netty) |
13620 |
0.67 |
rmi |
2461.79 |
4 |
hessian |
2417.7 |
4.1 |
http(json序列化) |
8179.08 |
1.15 |
2.0和1.0默认 对比百分比 |
10.92 |
-12.22 |
dubbo序列化相比hessian2序列化百分比 |
13.56 |
-15.19 |
5.2 场景名称: 1k string 场景 |
|
TPS成功平均值 |
响应时间成功平均值(ms) |
dubbo1 (hessian2序列化+mina) |
11940 |
0.8 |
dubbo2 (hessian2序列化+netty) |
14402 |
0.64 |
dubbo2 (dubbo序列化+netty) |
15096 |
0.6 |
rmi |
11136.02 |
0.81 |
hessian |
11426.83 |
0.79 |
http(json序列化) |
8919.27 |
1.04 |
2.0和1.0默认 对比百分比 |
20.62 |
-20.00 |
dubbo序列化相比hessian2序列化百分比 |
4.82 |
-6.25 |
5.3 场景名称: 50k string 场景 |
|
TPS成功平均值 |
响应时间成功平均值(ms) |
dubbo1 (hessian2序列化+mina) |
1962.7 |
5.1 |
dubbo2 (hessian2序列化+netty) |
1293 |
5.03 |
dubbo2 (dubbo序列化+netty) |
1966 |
7.68 |
rmi |
3349.88 |
2.9 |
hessian |
1925.33 |
5.13 |
http(json序列化) |
3247.1 |
3 |
2.0和1.0默认 对比百分比 |
-34.12 |
-1.37 |
dubbo序列化相比hessian2序列化百分比 |
52.05 |
52.68 |
5.4 场景名称: 200k string 场景 |
TPS成功平均值 |
响应时间成功平均值(ms) |
|
dubbo1 (hessian2序列化+mina) |
324.2 |
30.8 |
dubbo2 (hessian2序列化+netty) |
362.92 |
27.49 |
dubbo2 (dubbo序列化+netty) |
569.5 |
17.51 |
rmi |
1031.28 |
9.61 |
hessian |
628.06 |
15.83 |
http(json序列化) |
1011.97 |
9.79 |
2.0和1.0默认 对比百分比 |
11.94 |
-10.75 |
dubbo序列化相比hessian2序列化百分比 |
56.92 |
-36.30 |
Analysis
6.1 性能分析评估
Dubbo2.0的性能测试结论为通过,从性能、内存占用和稳定性上都有了提高和改进。由其是内存管理由于将mina换成netty,大大减少了1.0版本在高并发大数据下的内存大锯齿。如下图:
6.2 性能对比分析 ( 新旧环境、不同数据量级等 )
Dubbo2.0相比较Dubbo1.0(默认使用的都是hessian2序列化)性能均有提升(除了50k String),详见第五章的性能数据。
出于兼容性考虑默认的序列化方式和1.0保持一致使用hessian2,如对性能有更高要求可以使用dubbo序列化,由其是在处理复杂对象时,在大数据量下能获得50%的提升(但此时已不建议使用Dubbo协议)。
Dubbo的设计目的是为了满足高并发小数据量的rpc调用,在大数据量下的性能表现并不好,建议使用rmi或http协议。
6.3 测试局限性分析(可选)
本次性能测试考察的是 dubbo 本身的性能,实际使用过程中的性能有待应用来验证。
由于 dubbo 本身的性能占用都在毫秒级,占的基数很小, 性能提升可能对应用整体的性能变化不大。
由于邮件篇幅所限没有列出所有的监控图,如需获得可在大力神平台上查询。
发表评论
-
如何更好地学习dubbo源代码
2018-09-14 17:28 513http://jm.taobao.org/2013/11/ ... -
一种队列限流方案
2014-08-26 19:29 1787参考:http://my.oschina.net/le284 ... -
dubbo入门
2013-07-02 10:00 22103dubbo是阿里巴巴开源的 ... -
dubbo协议参考
2012-10-03 14:15 25775http://code.alibabatech.com/wik ... -
dubbo导致死锁问题
2012-09-27 14:03 7593延迟暴露 (+ ) (# ) 如果 ... -
服务化需要考虑的问题
2012-09-27 13:36 1686在大规模服务化之前,应用可能只是通过RMI或Hessian等工 ... -
防痴呆设计
2012-09-27 13:34 1288最近有点痴呆,因为解 ...
相关推荐
《ice-dubbo-thrift-grpc性能测试对比》 在IT领域,选择合适的RPC(远程过程调用)框架对于系统的性能和可扩展性至关重要。本文主要分析了四种常见的RPC框架——ice、dubbo、thrift和grpc的性能表现,通过一组简化...
在本实例中,我们将探讨如何入门Dubbo并进行性能测试,特别是对比Dubbo集群与在同一JVM内运行的非Dubbo服务的性能差异。 1. **Dubbo入门** - **安装配置**:首先,你需要安装Java环境,并在项目中引入Dubbo依赖。...
6. **性能测试**: 可选地,进行压力测试,评估服务的性能和稳定性。 七、最佳实践 1. **单元测试**: 对每个接口编写单元测试,覆盖各种边界条件和异常情况。 2. **持续集成**: 将本地测试集成到持续集成(CI)流程中...
Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它提供了一套完整的服务调用、监控、注册与发现的解决方案。本DEMO旨在帮助初学者快速理解并掌握Dubbo的核心概念和基本使用方法。 1. **服务提供...
Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了服务治理功能,包括服务注册、服务发现、负载均衡等。在这样的项目中,单元测试是确保代码质量、降低维护成本的关键环节。 【描述】描述了如何在Dubbo服务...
- **dubbo-parent**和**netty-parent**:这些可能是项目源码的父级目录,包含了dubbo和netty相关的模块或子项目,可能包括配置文件、源代码、测试用例等资源,供开发者深入研究和定制化开发。 综上所述,本项目旨在...
标题中的“Dubbo测试”指的是基于Dubbo框架进行的软件测试活动,这通常涉及到服务的接口测试、性能测试、稳定性测试等。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了丰富的服务治理功能,如...
Dubbo是一款高性能、轻量级的Java开源框架,主要用于实现分布式服务治理。它提供了一种简单易用的服务发现、调用、监控和管理机制。在实际开发中,为了更好地理解和测试Dubbo服务,可视化的测试工具显得尤为重要。...
【Dubbo接口UI测试工具】是一款专为Dubbo服务设计的图形化测试工具,它使得开发者和测试人员能够更方便地对Dubbo接口进行功能验证和性能测试,无需编写复杂的代码,只需简单配置Zookeeper的IP和端口号,就能直接与...
【标题】"telnet dubbo接口测试工具"指的是一个专门设计用于通过telnet协议来测试Dubbo服务接口的工具。Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它提供服务调用、注册、发现等功能。telnet作为网络...
SpringBoot简化了Spring应用的初始化和配置过程,而Dubbo则是一个高性能、轻量级的服务治理框架,专注于远程调用。下面将详细阐述这两个框架以及如何将它们结合使用来实现"Hello World"项目。 **SpringBoot简介** ...
在IT行业中,接口测试是确保服务之间有效通信的关键步骤,特别是在分布式系统中,如使用了Dubbo框架构建的系统。Dubbo是一个高性能、轻量级的开源Java RPC框架,它致力于提供面向服务的治理方案,包括服务注册、发现...
在Android开发中,有时我们需要对服务进行快速测试或验证,特别是在使用Dubbo作为微服务框架时。"Android-客户端直连Dubbo服务测试使用或者用来验证线上服务"这个主题主要涉及的是如何在Android客户端直接与Dubbo...
在IT行业中,Dubbo是一款非常知名的高性能、轻量级的Java RPC框架,它极大地促进了服务化时代的进程。本文将深入探讨“dubbo自动化测试”的主题,帮助开发者理解如何有效地进行Dubbo服务的自动化测试,提高代码质量...
**Dubbo 完整的测试实例** Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它提供了服务注册、服务发现、负载均衡、容错机制等核心功能,旨在提升微服务架构下的开发效率和系统性能。在这个完整的...
【Dubbo使用测试】 在Java开发领域,Dubbo是一个广泛使用的高性能、轻量级的开源服务框架,由阿里巴巴提供。它的主要目标是解决分布式系统中的服务调用问题,实现服务的治理,包括服务的注册、发现、负载均衡、监控...
在IT行业中,性能测试是确保系统稳定性和可扩展性的重要环节。JMeter是一款广泛应用的开源性能测试工具,常被用来测试Web应用的性能。而当我们谈论"jmeter测试dubbo请求"时,这意味着我们要利用JMeter对基于Dubbo...
Dubbo 是一个高性能、轻量级的开源 Java RPC 框架,由阿里巴巴开发并维护。它主要解决了分布式系统中的服务治理问题,包括服务的发布、查找、调用以及监控等。下面我们将深入探讨 Dubbo 的核心概念和工作流程,以及...
3. **服务测试**:Dubbo支持Mock服务,可以在不依赖真实服务的情况下进行单元测试,提高了开发效率。 4. **微服务架构**:在微服务架构中,Dubbo可以帮助拆分大型系统为多个小型、独立的服务,每个服务都可以独立...
它提供了与Dubbo协议兼容的取样器、监听器和断言,使得测试人员能够在JMeter中直接进行Dubbo服务的调用和性能测试。 2. **版本信息** "jmeter-plugins-dubbo-2.7.1-jar-with-dependencies (1)" 这个版本号表明这是...