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

wrk压测打不上去,工作进程一致处于io等待状态。

问题描述使用wrk压测,设置1客户情况下压测正常完成,若客户数量大于1,则工作进程一致处于IO等待状态,响应极慢。

问题描述

使用 wrk 压测,设置 1 客户情况下压测正常完成,若客户数量大于 1,则工作进程一致处于 IO 等待状态,响应极慢。




补充1

发现进程启动时也存在相同的状况,比如触发

1
onWorkerStart

事件后要等待5秒才在




1
shell

中回显。
经过核查,在

1
onWorkerStart

中的业务代码耗时只耗时

1
0.015s


通过

1
strace

发现在IO操作时发生协程切换导致耗时

1
5s

1
2
3
4
5
6
7
8
3334  14:40:09.088417 <... close resumed> ) = 0 <0.000405>

3334  14:40:09.088537 lstat("/home/vagrant/code/nxAdmin/vendor/composer/../nhzex/tp-swoole/src/Resetters2/RebindHttpContainer.php", {st_mode=S_IFREG|0775, st_size=516, ...}) = 0 <0.000118>

3334  14:40:09.088751 openat(AT_FDCWD, "/home/vagrant/code/nxAdmin/vendor/nhzex/tp-swoole/src/Resetters2/RebindHttpContainer.php", O_RDONLY

3334  14:40:14.217150 <... openat resumed> ) = 15 <5.128368>

3334  14:40:14.217250 fstat(15,  

3334  14:40:14.217306 <... fstat resumed> {st_mode=S_IFREG|0775, st_size=516, ...}) = 0 <0.000045>

3334  14:40:14.217405 fstat(15,  

3334  14:40:14.217436 <... fstat resumed> {st_mode=S_IFREG|0775, st_size=516, ...}) = 0 <0.000020>

================ 原问题 ===============

环境

1
2
PHP 7.2.18-1+ubuntu18.04.1+deb.sury.org+1

Swoole 4.3.4 & 4.3.3


Swoole Server Http 设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Runtime::enableCoroutine(true);

[

    'daemonize' => false,

    'dispatch_mode' => 2,

    'worker_num' => 4,

    'enable_coroutine' => true,



    'task_worker_num' => 2,

    'task_enable_coroutine' => true,



    'pid_file' => App::getRuntimePath() . 'swoole.pid',

    'log_file' => App::getRuntimePath() . 'swoole.log',



    'enable_static_handler' => true,

    'document_root' => App::getRootPath() . 'public',



    'heartbeat_check_interval' => 60,

    'heartbeat_idle_time' => 1200,



    'package_max_length' => 20 * 1024 * 1024,

    'buffer_output_size' => 10 * 1024 * 1024,

    'socket_buffer_size' => 128 * 1024 * 1024,



    'send_yield' => true,

    'reload_async' => true,

]


压测正常状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
wrk --latency --timeout 3s -t1 -c1 -d30s http://127.0.0.1:9505/

Running 30s test @ http://127.0.0.1:9505/

  1 threads and 1 connections

  Thread Stats   Avg      Stdev     Max   +/- Stdev

    Latency    10.70ms    3.44ms  39.65ms   87.14%

    Req/Sec    94.73     19.41   121.00     79.67%

  Latency Distribution

     50%    9.39ms

     75%   10.28ms

     90%   15.44ms

     99%   24.84ms

  2838 requests in 30.08s, 5.43MB read

Requests/sec:     94.34

Transfer/sec:    184.90KB


压测失败状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wrk --latency --timeout 3s -t4 -c4 -d30s http://127.0.0.1:9505/

Running 30s test @ http://127.0.0.1:9505/

  4 threads and 4 connections

  Thread Stats   Avg      Stdev     Max   +/- Stdev

    Latency    70.38ms  391.57ms   2.76s    97.96%

    Req/Sec    18.50     30.50    70.00     71.43%

  Latency Distribution

     50%   14.13ms

     75%   15.84ms

     90%   17.15ms

     99%    2.76s

  58 requests in 30.07s, 113.68KB read

  Socket errors: connect 0, read 0, write 0, timeout 9

Requests/sec:      1.93

Transfer/sec:      3.78KB


strace 详情

1
2
3
4
5
6
7
8
9
10
[pid 12317] 10:48:30.016398 openat(AT_FDCWD, "/home/vagrant/code/project/runtime/temp/77fce4e169dad1de2ddeb9e87d2045b2eec20baa.php", O_RDONLY) = 30 <5.100331>

[pid 12317] 10:48:35.116888 fstat(30, {st_mode=S_IFREG|0775, st_size=2273, ...}) = 0 <0.000064>

......

[pid 12317] 10:48:35.152471 openat(AT_FDCWD, "/home/vagrant/code/project/runtime/temp/77fce4e169dad1de2ddeb9e87d2045b2eec20baa.php", O_RDONLY) = 30 <5.089026>

[pid 12317] 10:48:40.241569 fstat(30, {st_mode=S_IFREG|0775, st_size=2273, ...}) = 0 <0.000012>

......

[pid 12317] 10:48:50.503502 stat("/home/vagrant/code/project/app/view/dispatch_jump.blade.php", {st_mode=S_IFREG|0775, st_size=2133, ...}) = 0 <0.000085>

[pid 12317] 10:48:50.503701 stat("/home/vagrant/code/project/runtime/temp//77fce4e169dad1de2ddeb9e87d2045b2eec20baa.php", {st_mode=S_IFREG|0775, st_size=2273, ...}) = 0 <0.000062>

[pid 12317] 10:48:50.503939 openat(AT_FDCWD, "/home/vagrant/code/project/runtime/temp/77fce4e169dad1de2ddeb9e87d2045b2eec20baa.php", O_RDONLY) = 30 <0.001014>

[pid 12317] 10:48:50.505123 fstat(30, {st_mode=S_IFREG|0775, st_size=2273, ...}) = 0 <0.000106>

可以看到在

1
opena

函数执行耗时达

1
5s


   



推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • |Q|A|-------------------|-----|Bugreport?|ye ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
  • 之前我们已经学习过PHP中的引用计数以及垃圾回收机制的概念。这些内容非常偏理论,也是非常常见的面试内容。而今天介绍的则是具体的关于垃圾回收的一些功能函数。关于之前的两篇介绍文章,大家可以到文章底部查看。再谈循环引用以及强制清理循环引用我们为什么要强调“ ... [详细]
  • 使用版本:1.8.0及以上使用条件:1.开启async-redisphp--riswoole(如果没有开启,重新编译安 ... [详细]
author-avatar
熊金涟_473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有