文字转图片性能优化-多进程
2016-9-21
| 2024-10-1
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

前言

用于测试的那台vps只能做到每秒处理20请求,然后cpu占用就100%了,暂时没有想到优化方案,所以先通过加机器来解决;因为线上服务器都是多核的,所以考虑开启多个进程来提升性能;

尝试优化

  • 开始的想法每次请求fork一个子进程,处理完毕再disconnect自身,于是开始改造代码;
  • 改完了跑压测发现10s complete 173个请求,再看cpu占用,25%左右,有点想不通;
  • 突然想到自己的本本是2C4T的,四个cpu逻辑核心只能并行处理四个任务,那么剩下的进程可能都在等待状态咯?
  • 继续查资料了解到,虽然多个进程可以利用多个cpu核心,但是我缓存了一些数据在内存中,多个进程共享这个缓存,因此也可能会造成阻塞;
  • 所以上边的cpu占用下降,同时处理响应数量也下降就有了一个初步推测,暂时先忽略,换个思路;

其它方案

  • 怀疑自己写的fork子进程影响了性能,所以使用pm2 配置<code>"instances": "max"</code>来开启多个实例测试,代码也可以还原了;
  • 跑下压测发现成功返回的请求只是提高到了600左右,cpu也不会占用到100%了,四个逻辑核心占用最多同时到80%左右,那么目前来看瓶颈应该不在cpu这边;

继续瞎想

  • 输出了一下从创建canvas到导出图片的console.time(OneApm个人用太贵),发现需要50ms左右, 1000ms/50=20,因为这期间cpu是阻塞的,所以这个并发数是对的,优化前大概就是这个水平;
  • 但是开启多个实例后ab的complete只能到600左右,并且发现开启两个实例和四个实例并发数差别不大,有点奇怪(不知道是否和逻辑核心有关);
  • 目前性能优化上想不到好的方案了,优化就到这儿,暂时靠加点来支撑吧;

压测数据如下

并发数为20:
并发数为50:

测试下另外一个cpu轻度使用的接口多进程下的并发

  • 发现还是有提升的,但是没有想象的X4那么给力
单实例
使用pm2开4个实例
  • 开发
  • parseInt(0.1+0.2-0.3)=5的分析文字转图片性能优化-单机
    Loading...