DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 9
在线用户: 3
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 16:35:32
标题:
DataSnap REST 压力测试 浏览:3344
加入我的收藏
楼主: 使用datasnap Rest 构建中件间,服务器用FDConnection通过odbc连接数据库sybase sqlanywhere 8.0.3。以TFDJSONDataSets格式向客户端传送数据。sql anywhere 8.0.3 是一个网络数据库,性能远高于mysql。
按李维老师指导,对最大连接数、线程池、倾听线程数进行调整,将DSWebDispatcher1更换为DSRESTWebDispatcher1。不知何故,无法开启FDConnection的连接池pooled,性能估计有影响。
测试两个性能:1、普通、固定参数的http访问。2、select xm,xb,csny,szxz,commune from tbworker,约从数据库提取1000条记录X5个字段,没有图形字段。
测试用两个工具:ab,jmeter 2.11。
现在开始。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 16:52:47
1楼: 测试A1:先用ab测试固定参数http
1000个客户端每次1000次请求:d:\ab\ab -c1000 -n1000 http://202.142.155.73:33228/datasnap/rest/TServerMethods1/sayname/姓%20名
此帖子包含附件:
PNG 图像
大小:86.6K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 17:46:03
2楼: 可见,可以正常应付1000个并发请求。没有错误,每个请求耗时19.8毫秒。
现在加大到1500,连续3次:
现在出现了一个连接错误,每次请求25ms。
此帖子包含附件:
PNG 图像
大小:82.7K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 18:02:56
3楼: 现在加大到3000,服务器出现内存溢出。受不了了。
此帖子包含附件:
PNG 图像
大小:121.5K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 18:15:39
4楼: 测试A2:select xm,xb,csny,szxz,commune from tbworker,约从数据库提取1000条记录X5个字段,没有图形字段。100个并发用户:
>d:\ab\ab -c100 -n100 http://202.142.155.73:33228/datasnap/rest/TServerMethods1/getworkers/select%20xm,xb,csny,szxz%20from%20tbworker
失败95,成功5。全部错误都是length类型的。
不至于吧?到了动态参数datasnap就不干了?据说是ab是问题。
改用jmeter吧,jmeter使用有些复杂哦。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 18:53:07
5楼: 测试B1:用jmeter2.11。测试静态参数的http请求。
先设立500个线程,相当于500个在线客户端,偱环3次。没有任何错误。
此帖子包含附件:
PNG 图像
大小:95.8K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 19:13:03
6楼: 加至1000个线程,重复1次。出现37错误,如重复3次,服务器出现数据库错误。
看来静态参数网页只能稳定在500个并发。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 19:54:22
7楼: 测试B2:测试动态http请求。select xm,xb,csny,szxz,commune from tbworker,约从数据库提取1000条记录X5个字段,没有图形字段。
先500个线程(相当同时在线用户)。没有任何错误。连接测3次,出现一个错误。可用。
此帖子包含附件:
PNG 图像
大小:235.2K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 20:10:13
8楼: 现在加到1000个线程试试动态查询数据库的http请求,为了消除影响,注销一下远程服务器,重新登录下。结果有36错误。
此帖子包含附件:
PNG 图像
大小:61.6K
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 20:33:56
9楼: 千分之3.6个仍有一定可用性,
现在加到2000个并发用户。
结果惨了。中间件数据库直接挂了。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/5 20:45:42
10楼: 有关说明:
1、所有测试是在家庭宽带网下,通过远程桌面连接到服务器工作的,因此环境并不太好,但接近真实工作情况。
2、数据库连接是odbc,数据库没有采取高性能的一线产品,特别没开户连接池,而且挂掉的都是在数据库访问时发生的。。
3、关键是,中间件是exe方式部署。如果在dll方式下工作在iis上,性能和稳定性会大幅提升,可惜还没掌握如何发布。
测试结论:DataSnap Rest exe服务器在500个并发用户下,可以以较好的速度工作。在1000个并发下,可以坚持工作,但可用性不太好。在2000个,中间件会挂掉。因此datasnap exe适合小型应用。
----------------------------------------------
-
作者:
男 delphiilove (乌羽玉) ★☆☆☆☆ -
普通会员
2018/5/6 16:47:46
11楼: 可以试试 把 Datasnap 发布为 Windows 服务
----------------------------------------------
-
作者:
男 hujiacheng ( 旺财) ★☆☆☆☆ -
普通会员
2018/5/6 19:48:55
12楼: odbc 系统池 了接一下(有这玩意吗  我看到设置了)
----------------------------------------------
免费的FTPhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi.icm.edu.pl/ftp/https://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/6 20:18:00
13楼: 发布为dll的服务,没用上iis功能,与exe无异。
----------------------------------------------
-
作者:
男 zhangpuqing (pupu) ★☆☆☆☆ -
普通会员
2018/5/7 9:13:24
14楼: 跟操作系统也有关系,windows也就在1000左右,linux在2000左右
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2018/5/7 9:13:28
14楼: 赞一个!
----------------------------------------------
-我的博客
作者:
男 leisure520 (高家坳小宝) ▲▲▲▲▲ -
普通会员
2018/5/7 12:27:19
15楼: windows可以修改线程数的啊,而且修改内存占有,而且测试带宽、机器全有关系。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/7 15:09:27
16楼: 我觉得datasnap rest挺好用的,其实测试中出错多崩溃少,崩溃是中间层数据库驱动程序引起的。虽然没有高并发组件,但使用难度不大,功能也比较全。
----------------------------------------------
-
作者:
男 newsxy (呼呼) ★☆☆☆☆ -
盒子活跃会员
2018/5/8 13:30:07
17楼: 赞一个,正在用Datasnap rest,正在准备测试,学习一下
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2018/5/8 14:27:56
18楼: Windows下每个线程缺省需要占用1MB的虚拟地址空间供该线程的用户态栈使用,不管该线程的用户态栈实际使用了多少内存,反正这1MB是不能用于其他用途了。有些情况下不需要预留这么大的栈空间,特别是Delphi这种对象只能在堆中分配的OOP语言。可以不使用TThread,而直接调用CreateThread API来达到修改预留栈空间大小的目的。
Windows的32位版本上,每个进程的用户态空间为2G,所以按照缺省的1MB用户态栈计算,每个进程最多只能创建1000多个线程。
在Windows的64位版本上运行32位的程序时,因为内核态代码是清一色64位的,所以需要把32位代码的系统调用的参数转换为64位系统调用参数(诸如指针之类),而实现这种转换的代码也在用户态执行,也需要使用栈,所以每个线程除了有一个1MB的32位用户态栈外,还有一个512kB的64位用户态栈,所以同一个32位程序,在Windows的64位版本上运行能够创建的线程数目比Windows的32位版本上更低一些。
当然,如果把程序编译成64位,在Windows的64位版本上运行,上述问题将得到极大的缓解,因为64位程序的用户态虚拟地址空间可达128TB,实际运行时可以创建的线程数只受限于物理内存的容量。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/8 14:57:37
19楼: delphi 10.2.3,只能把datasnap Rest编译为win32,不能编译为64位。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/9 8:14:31
20楼: 渴望与搞datasnap+FireMonkey的同仁交流,wx:sxqwhxq qq:360825938 欢迎加我,附言:datasnap+FireMonkey
----------------------------------------------
-
作者:
男 feiyanm (feiyanm) ▲▲▲▲▲ -
普通会员
2018/5/9 11:22:37
21楼: 小应用,快速原型,用Delphi还能用用。
稍微复杂一点,或者并发多一点,还是出门右转吧。
不是说d不好,实际上跟主流比起来,感觉就像地球文明和歌者文明一样,不是差一点点,而是差一个维度。
----------------------------------------------
Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!我去WC吐一会儿去!
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/9 12:21:31
22楼: 不同意楼上。datasnap rest能够完好处理500个线程同时访问。同时在线与同一瞬间访问还是有差别的,在现实项目应该不多的,我又不做电商、微信、QQ。
----------------------------------------------
-
作者:
男 ydrzh (ydrzh) ★☆☆☆☆ -
普通会员
2018/5/9 16:52:02
23楼: Rest服务器可以编译成64位EXE啊
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/9 17:04:28
24楼: 楼上,要怎样设置呢,我这里只能编译32位。
----------------------------------------------
-
作者:
男 vclclx (vclclx) ★☆☆☆☆ -
普通会员
2018/5/9 17:53:03
25楼: 基础知识问题,都没人愿意理了,在工程管理器,Target Platform上点右键,添加平台。
----------------------------------------------
-
作者:
男 ydrzh (ydrzh) ★☆☆☆☆ -
普通会员
2018/5/9 17:58:33
26楼: 对,如楼上所述
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/9 20:59:39
27楼: 把datasnap rest 编译为64位,结果android、windows客户端全罢工了。因为datasnap rest连接了sqlanywhere数据库,而数据库组件都是32位的,没有64位驱动。
----------------------------------------------
-
作者:
男 ydrzh (ydrzh) ★☆☆☆☆ -
普通会员
2018/5/9 22:51:48
28楼: 数据库不是用Firedac连接?
----------------------------------------------
-
作者:
男 vclclx (vclclx) ★☆☆☆☆ -
普通会员
2018/5/9 23:43:21
29楼: 既然用的sqlanywhere数据库,那就跟Sybase要64位客户端连接驱动啊,或者网上搜一搜。你要是找不到64位连接驱动,那也不是Delphi的问题。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/10 19:28:49
30楼: 现在把测试放在局域网内进行。在充分保障带宽的情况下,所有用jmeter的测试调至1000个线程,循环5次,居然没有一个错误发生。但调高到1500时,一个负责数据库连接的dbgen8.dll崩溃导致中间件挂掉。如果换成sql server 或者oracle,应该可以达到1500。看来在保证网络通畅情况下,1000个并发读应该没问题,如果网络状况一般,500个并发很正常。目前没测试1000个并发写。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2018/5/10 22:59:16
31楼: 用ISAPI DLL来做服务端, 用EXE服务端来搞压力测试这不是开玩笑么
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/11 10:16:32
32楼: 楼上可出此言?服务端,我还不会用dll发布。中间件用firedac与sqlanywhere连接,所有要用到一些数据库驱动程序的dll文件,每次测试都是这些驱动先挂机,而不是中间件的rest组件挂机。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2018/5/11 15:44:56
33楼: ISAPI DLL服务端性能比EXE服务端高几十倍

在乎性能的没人会用EXE服务端
----------------------------------------------
-
作者:
男 vclclx (vclclx) ★☆☆☆☆ -
普通会员
2018/5/11 16:57:27
34楼: 请教楼上,ISAPI DLL是不是运行在http服务器的进程空间?那么它的可用内存及资源是不是共享http服务器的?会不会可用资源被http占用很多,导致ISAPI DLL的可用资源受限?http服务器对http的收发解析能力当然是非常好的,但是如果 ISAPI DLL运行出错,会不会影响http服务器的正常运行?
我感觉FastCGI作为web接口比较好,可惜Delphi不直接支持。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/11 19:12:23
35楼: @roadrunner:为何我用datasnap rest 做的dll不能发布呢?
首先,我基本上建了一个空的datasnap rest 中间件,其次,我把dll和一个html文档放在同一目录,html可以从远程访问,而dll就在iis内浏览也不行。应该设置iis没问题,而是dll的问题。
----------------------------------------------
-
作者:
男 bmsr (白忙剩人) ★☆☆☆☆ -
普通会员
2018/5/11 23:07:27
36楼: http://blog.sina.com.cn/s/blog_53866d750100z6s2.html
ISAPI和IIS相关设置看我以前的博客
----------------------------------------------
http://blog.sina.com.cn/bmsrnote
作者:
男 mousesoft (MouseSoft) ★☆☆☆☆ -
盒子活跃会员
2018/5/12 11:14:45
37楼: 其实你这个测试和应用的思路就不是很对,
1、没找到拖累你程序出错的原因,程序出错很大机会是你数据库访问哪边出的问题,跟datasnap没关;
2、有没按李维文章提到的,实时释放session?,这个很重要;
3、现在写程序不是一味的追求单程序的并发量的,你可以在程序的前面部署一个反向服务如NGIX之类的,后面可以运行N个后台程序;
4、datasnap网络这一块还是indy,以前的这些设计基本是每个连接占用一个线程的,所以要按李维提及的要及时释放session及把线程池的数量加大;
5、想办法整合sysHttp作为你web服务的处理;但我建议大可不必,还是哪句话,不要追求单程序的并发量,但如果你的程序优化得好的话20000左右应该是没问题的;再加上前端的反向代理,应该是没有什么限制的了;
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/12 13:16:01
38楼: 楼上,datasnap rest 是用http协议,http是短连接和无状态的,李维在讲datasnap rest这章,似乎没有讲要手动管理session。只是增长线程池大小、连接池大小。使用DSWebRESTDispatcher1替代DSWebhttpDispatcher1以控制每个无效连接断开的时间。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/5/12 13:23:20
39楼: 现在有一个问题影响datasnap rest的使用,倘若网络速度比较慢,例如在4G信号较弱的地方,用手机APP连接中间件,如果牵涉到读写数据稍大,例如看人的相片,手机app会失去响应。但手机上的微信、QQ或股票软件可以运行,只是速度慢。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行132.8125毫秒 RSS