热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swoole怎么提升服务器性能,tp5.1使用swoole做服务器简单的接口性能测试

官方测试地址:官方测试最近在看tp5.1的think-swoole支持,作为替代php-fpm的一种方案,现在简单的用swoole做为ht

官方测试地址:官方测试

最近在看tp5.1的think-swoole支持,作为替代php-fpm的一种方案,现在简单的用swoole做为http服务器和用传统的php-fpm分别测试下接口的性能。

测试机器:

mac:MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)

cpu:3.1 GHz Intel Core i5

memory: 8 GB 2133 MHz LPDDR3

数据库:mysql5.7 本地服务器

php: php7.2

默认开启了1个worker进程,经测试接口的性能根据开启worker的进程数成倍增加。

api php代码

namespace app\api\controller;

use app\common\controller\ApiBaseController;

use think\Db;

class User extends ApiBaseController{

public function __construct()

{

}

public function get_users(){

$users = Db::name('admins')->limit(50)->select();

return $this->responseJson('1','success',$users);

}

}

查询50条用户数据测试、

1.先测试传统的php-fpm,100个客户端并发1000次

$ ab -c 100 -n 1000 http://test.tp51.com/api/user/get_users

############## result

Server Software: nginx/1.13.2

Server Hostname: test.tp51.com

Server Port: 80

Document Path: /api/user/get_users

Document Length: 13002 bytes

Concurrency Level: 100

Time taken for tests: 16.389 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 13171000 bytes

HTML transferred: 13002000 bytes

Requests per second: 61.02 [#/sec] (mean)

Time per request: 1638.850 [ms] (mean)

Time per request: 16.389 [ms] (mean, across all concurrent requests)

Transfer rate: 784.84 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 0.7 0 4

Processing: 63 1550 282.5 1620 1744

Waiting: 63 1550 282.6 1620 1744

Total: 67 1551 281.9 1620 1744

Percentage of the requests served within a certain time (ms)

50% 1620

66% 1628

75% 1633

80% 1637

90% 1663

95% 1705

98% 1721

99% 1726

100% 1744 (longest request)

2.使用swoole做服务器

$ ab -c 100 -n 1000 http://127.0.0.1:9501/api/user/get_users

########### result

Server Software: swoole-http-server

Server Hostname: 127.0.0.1

Server Port: 9501

Document Path: /api/user/get_users

Document Length: 13015 bytes

Concurrency Level: 100

Time taken for tests: 3.910 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 13193000 bytes

HTML transferred: 13015000 bytes

Requests per second: 255.73 [#/sec] (mean)

Time per request: 391.034 [ms] (mean)

Time per request: 3.910 [ms] (mean, across all concurrent requests)

Transfer rate: 3294.80 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 0.9 0 5

Processing: 5 370 68.3 381 432

Waiting: 4 370 68.3 381 432

Total: 9 371 67.5 381 432

Percentage of the requests served within a certain time (ms)

50% 381

66% 387

75% 399

80% 404

90% 422

95% 429

98% 430

99% 430

100% 432 (longest request)

3.结果分析

性能大概提升了3~4倍

使用传统php-fpm

Requests per second: 61.02 [#/sec] (mean)

Time per request: 1638.850 [ms] (mean)

Time per request: 16.389 [ms] (mean, across all

concurrent requests)

使用swoole

Requests per second: 255.73 [#/sec] (mean)

Time per request: 391.034 [ms] (mean)

Time per request: 3.910 [ms] (mean, across all concurrent requests)

4. 使用redis测试

api代码

namespace app\api\controller;

use app\common\controller\ApiBaseController;

use think\Db;

use app\common\services\Predis;

class User extends ApiBaseController{

public function __construct()

{

}

public function get_users(){

$predis = new Predis();

$cache = $predis->get('users');

if (!empty($cache)){

return $this->responseJson('1','success',$cache);

}

$users = Db::name('admins')->limit(50)->select();

$predis->set('users',$users);

return $this->responseJson('1','success',$users);

}

}

5.性能测试

1.php-fpm + redis

Server Software: nginx/1.13.2

Server Hostname: test.tp51.com

Server Port: 80

Document Path: /api/user/get_users

Document Length: 13002 bytes

Concurrency Level: 100

Time taken for tests: 13.548 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 13171000 bytes

HTML transferred: 13002000 bytes

Requests per second: 73.81 [#/sec] (mean)

Time per request: 1354.764 [ms] (mean)

Time per request: 13.548 [ms] (mean, across all concurrent requests)

Transfer rate: 949.41 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 0.9 0 5

Processing: 42 1287 228.6 1334 1461

Waiting: 36 1287 228.7 1334 1461

Total: 42 1288 227.9 1334 1461

Percentage of the requests served within a certain time (ms)

50% 1334

66% 1352

75% 1363

80% 1378

90% 1409

95% 1426

98% 1441

99% 1449

100% 1461 (longest request)

2.使用swoole+redis

Server Software: swoole-http-server

Server Hostname: 127.0.0.1

Server Port: 9501

Document Path: /api/user/get_users

Document Length: 13015 bytes

Concurrency Level: 100

Time taken for tests: 3.189 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 13193000 bytes

HTML transferred: 13015000 bytes

Requests per second: 313.60 [#/sec] (mean)

Time per request: 318.881 [ms] (mean)

Time per request: 3.189 [ms] (mean, across all concurrent requests)

Transfer rate: 4040.31 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 0.9 0 5

Processing: 4 299 54.2 315 322

Waiting: 4 299 54.2 315 322

Total: 9 299 53.3 315 322

Percentage of the requests served within a certain time (ms)

50% 315

66% 316

75% 317

80% 318

90% 319

95% 320

98% 321

99% 322

100% 322 (longest request)

经测试,php-fpm+redis 性能提示不大,swoole+redis提升明显

php-fpm

swoole

mysql

RPS:61.02

RPS: 255.73

redis+mysql

RPS:73.81

RPS: 318.881



推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
author-avatar
我叫柒薇安2001
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有