评估服务基础性能应该参考那些指标?

        当谈到网络服务性能的时候,很多人都会采用一些单一性的指标数据作为性能参考,如支持多少在线,能跑到多少带宽等;实际上这些单一性的指标数据并不能反映服务的基础性能,毕竟应用场景是多样性的;那更好判断一个服务的基础性能需要符合那些要求呢?接下通过各种场景测试来证实一下,服务基础性能需要关注那方面的指标数据。

        为了可以得到更符合实际的测试结果,测试环境采用了10Gb的网络环境,对于一个服务端程序进行多种场景的测试,看一下服务端在各种单独指标项中性能有着怎样的表现。顺便也可以了解 一下在不讲武德的情况下把单一性指标如何做得更高来得到一个更有体面的说法。测试方法每个示例采样2分钟,看服务占用CPU资源情况。

在线并发数指标

        很多时候都会谈到这个指标项,简单来说以服务支持多少在线交互来对服务的性能做一个评价。接来分别做1000,10000,100000在线的通讯交互,但不改变其总网络读写的情况下CPU损耗是怎样的。

1000连接

10000连接

100000连接

以上是三种不同在线情况的测试,虽然10万在线在控制发送有些波动,但总体IO读写和带宽都保持在对应的区间上。从三个测试结果来看其服务端的cpu基本没有太多变化,即使1000和100000差了100倍的连接数也不会引起cpu资源波动。大量在线到达某一数据量的情况的确是对系统性能产生影响的,主要是对应句柄数量巨大引起系统的管理性能问题。

带宽指标

        这个指标项也经常谈,通过跑更高带宽来转化成消息处理,从而来确定服务可以处理多少消息量来突出服务性能的好坏。实际上高带宽是不是就意味着会损耗更高CPU资源呢?接下来测一下2000连接,在不改变IO读写量的情况来提高带宽吞吐看一下CPU资源的变化。

发送128字节

发送4K数据

同样的IO读写量,前者跑了70Mb带宽,后者使用了超过2Gb带宽;但两者的CPU资源使用量基本一样;所以能跑多少带宽完全取决于测试者基于什么导向来测试。

网络IO读写

        说实话很少人在讨论网络服务基础性能的时候会引入这一指标,毕竟这一指标是实打实的,在一台服务器上这指标的支撑量是固定的。它和在线连接数并发带宽没有一个正比的关系;简单来低带宽也可能出现高IO读写应用,高并发在线也可以出现低IO读写。文无第一武无第二,上面两项是文而这一项就是武了!毕竟实际应用中普遍都是基于请求响应的方式,每个操作都涉及两到一个或多个网络IO写和读。

50连接高并发读写(4K)

200连接高并发读写(128字节)

这项测试中虽然都使用了低连接和最后面测试的低带宽,但在所有测试中服务端最占资源是这两项测试,而它们都有着低连接,低带宽的特性;但同样有着一个共同的特点是有着大量的IO读写,这些IO读写量都远比之前的测试要高,同样CPU使用量也是相对提高了。

总结

        通过以上的多个测试相信对服务端的基础性能应用那些指标来评估有个一个大体的了解。抛开实际业务逻辑网络读写对整网络服务来说占主要性能开销,相对于同时在线数和带宽这些单一性的指标有着更重要的参考性;所以讨论这方面的内容时一定要制定一个更清晰的基础准则才能更好地去判定。

        回到实际服务应用开发中思考,既然服务的网络读写是这么有限制和损耗资源,那在设计时候就尽可能合并这方面的工作,在业务可接受的情况下合并IO读写来提高效率。

        现有的性能测试已经不会把同时在线或能跑多少带宽这些单一的指标用于作为性能测试的参考;在techempower的测试中没有一项测试是采用数万或数十万的连接作为测试要求,毕竟这两项已经是外部环境因素了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法题目——岛屿问题(POJ-1328)

POJ-1328 题目大意:在x轴上建立尽量少的雷达覆盖所有的岛屿。 Input:岛屿的数量n,雷达覆盖半径d.接下来的n行一行表示一个岛屿(x,y). Output:每个案例的雷达最少数目. 经典的区间选点! 要搞清楚为什么排序,然后要明…

oracle symonym_Oracle的同义词(synonyms)

oracle的同义词总结:从字面上理解就是别名的意思,和视图的功能类似。就是一种映射关系。1.创建同义词语句:create public synonym table_name for user.table_name;其中第一个user_table和第二个user_table可以不一样。此外如果要创建一个远程…

简述C#中应用程序集的装载过程

了解程序集如何在C#.NET中加载我们一直在处理库和NuGet软件包。不管是好是坏,高级.NET开发人员都需要了解.NET运行时如何加载程序集。这些库依赖于其他流行的库,并且有很多共享的依赖项。有了足够大的依赖关系网络,您最终将陷入冲…

vue 插入word模板 项目_10 分钟为你的 vue 项目编写代码文档

代码文档是软件开发使用和维护的必备资料,有了文档,开发和维护以及协作的效率将变得大大提升。tips:如果对 JSDoc 已经熟悉,可以直接跳到实战演练环节。什么是文档?软件文档或者源代码文档是指与软件系统及其软件工程过程有关联的…

python小游戏——21点

编写一副扑克牌和一个发牌函数,要求: (1) 创建一副扑克牌,不包含两个Joker,其它牌面每个四张,花色可以用任意特殊符号表示; (2) 按照21点的游戏规则,使用学过的数据类型来指定每张牌的点数,其中数字牌的点数与同数字大小,J、Q和K的点数为0.5,A的点数为1; (3) 发牌函…

Magicodes.IE 2.5版本发布

今天我们发布了2.5版本,这当然也离不开大家对Magicodes.IE的支持,今天我也是跟往常一样列举了该版本一些重要的更新内容。当然也要说一下,在这个版本中我们设计了全新的LOGO。Excel导出Excel导出支持HeaderRowIndex #164(https://…

算法题目——最短路径问题(HDU—1007)

题目链接:HDU-1007 前序: 先看一维中的最短路径的计算方式 问题的简单描述:(题意) 在一个笛卡尔系中,n个点分布不一,在这N个点中,求出相距最短的两个点之间的距离 思路: 分治二分法 解题报告…

没有Kubernets,学习Docker还有用吗?

Docker容器化和Kubernetes容器编排,作为微服务和云原生的核心依赖,这几年已是大红大紫全民皆知。然而近日Kubernetes官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,惊呆了一众开发者。在这背后,究竟是人性的扭曲&…

oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...

(1)set serveroutput on实现plsql developer 打印输出(2)如何查看存储过程,存储函数,触发器的内容查 user_sources表eg:查询GET_DEPT_SUMSAL这个存储函数的内容SQL> desc user_source名称 是否为空? 类型-------------------------------…

算法题目——二次函数三分求极值(HDU-3714)

题目链接:HDU-3714 题目描述: 对于N个二次函数,求每个二次函数的最小值中的最大值 思路: 使用三分法求极值(递归调用) 对于这种在指定区间里只有一个极值点的函数(凸函数凹函数都可以&#xff…

怎样才能去掉图片锁定纵横比_1分钟批量统一Word中300张图片的大小!无需插件、代码,超级简单...

很多时候我们需要将在Word中插入很多张图片,插入完成之后,一般我们还要统一它们的大小,如果是少量的图片的话,我们可以一个一个选择,然后再进行设置。或者先设置好一张图片后,再通过【F4】键,进…

我国火力发电站的大脑用上了国产系统

近年来,我国核电、水电、风电、光伏产业发展迅速,但从发电总量来看,火电依然占据7成以上的发电比例。水电、风电、光伏等清洁能源受自然条件限制,只能成为火电的有效补充,而不可能取代火电。而福岛核事故、切尔诺贝利核…

require 动态加载_require,exports,module.exports和import,export,export default

我们前端在开发过程中经常会遇到导入导出功能,在导入时,有时候是require,有时候是import在导出时,有时候是exports,module.exports,有时候是export,export default今天我们对这些内容进行简单的…

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

Newbe.Claptrap 0.4.4 发布,模型验证器上线。更新内容完全基于表达式树的模型验证器本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。我们罗列了与 FluentValidation 比较的情况:Build in ValidatorsFluentVali…

算法题目中经典问题(易错点)

算法题目中经典问题.易错点 (一).二维数组的传参问题1.方法一:形参为二维数组并给定第二维长度2.方法二:形参为指向数组的指针并给出数组长度3.二维数组定义为全局变量(二).多组测试控制台数据,输入到文件结束(三).进制转换中的小问题1.使用字符串来存储,每一位(四).结构体…

dotnet core 应用是如何跑起来的 通过AppHost理解运行过程

在 dotnet 的输出路径里面,可以看到有一个有趣的可执行文件,这个可执行文件是如何在框架发布和独立发布的时候,找到 dotnet 程序的运行时的,这个可执行文件里面包含了哪些内容在回答上面的问题之前,请大家尝试打开 C:\…

算法题目——整数划分(HRBUST-2004)

题目链接:HRBUST-2004 递归法: 1.当n1时,此时只有1种解{1}; 2.当m1时,此时也只有1种解{1,1,1, … 3.当n> m时,要分为最大数包含m和不包含m两种情况。 ●包含m:此时就是{mx1,2…}. 其中x1x23.… n-m, 就相当于求和为n-m,最…

dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程

在上一篇博客是使用官方提供的 AppHost 跑起来整个 dotnet 程序。本文告诉大家在 dotnet 程序运行到托管代码之前,所需要的 Native 部分的逻辑。包括如何寻找 dotnet 运行时,如何加载运行时和框架然后跑起来业务端的 dll 文件的逻辑在上一篇博客告诉大家…

android虚线边框_Android实现代码画虚线边框背景效果

实现如下边框效果:虚线画效果,可以使用Android中的xml来做。下面话不多说,直接上代码:android:id"id/coupon_popup"android:layout_width"320dp"android:layout_height"200dp"android:layout_margi…

算法题目——多米诺骨牌问题(POJ-2663)

题目链接:POJ-2663 设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放到棋盘上,使得任何两张多米诺牌均不重叠&…