关于egg.js 性能,求指导
 发布于 8 年前  作者 bqxu  7041 次预览  最后一次回复是 8 年前  来自 问答 

最近用egg作请求转发,页面渲染层 用 curl 转发请求 ,ejs 渲染页面 因为实际并发,所以想问问有没有哪位大神可以给个参考值,来对比是不是程序出了问题

环境: 8核8G,qps、tps 大概能达到多少

20 回复
i5ting

租个阿里云之类的,1小时,安装带压测,估计10块钱就能搞定

bqxu

@i5ting 就是用的阿里云,egg 默认起了8个work,单个请求 curl 40个api请求响应总时长 800ms ,ejs 模版渲染 20ms 左右,但是 qbs 只有 10/s 左右,这个数值正常么? 正常响应时长5s,最长响应时长20s 。。。

bqxu

@i5ting 我们公司阿里云重度用户。100多台ecs。。。

atian25

@fengmk2:curl 下游能支撑多少?ejs 做了什么逻辑,多大的数据量?没法有通用的,推荐他用 alinode 查瓶颈吧

bqxu

@atian25 ejs ,就是渲染页面,产品单页 ,我把 egg-view-ejs,改成内置差价,输出了log, 大概 render 模版 20ms ,开始也以为是这个问题

bqxu

@atian25 curl 做了简单的配置修改,发现maxSockets 比较大的话,实际没应用那么多, 是不是调度会比较慢,就改小了 现在配置是这样的

config.httpclient = { rejectUnauthorized: false, // 默认开启 http/https KeepAlive 功能 keepAlive: true, // 空闲的 KeepAlive socket 最长可以存活 4 秒 freeSocketKeepAliveTimeout: 4000, // 当 socket 超过 30 秒都没有任何活动,就会被当作超时处理掉 timeout: 30000, // 允许创建的最大 socket 数 maxSockets: 400, // 最大空闲 socket 数 maxFreeSockets: 100, // 是否开启本地 DNS 缓存,默认关闭,开启后有两个特性 // 1. 所有的 DNS 查询都会默认优先使用缓存的,即使 DNS 查询错误也不影响应用 // 2. 对同一个域名,在 dnsCacheLookupInterval 的间隔内(默认 10s)只会查询一次 enableDNSCache: false, // 对同一个域名进行 DNS 查询的最小间隔时间 dnsCacheLookupInterval: 60000, // DNS 同时缓存的最大域名数量,默认 1000 dnsCacheMaxLength: 1000, };

okoala

@bqxu 这里 是 egg 相关的 benchmark,可以作为参考 image.png

但是具体指标还是得看你的业务情况,如果太低就应该有 bug 了。

atian25

你都在阿里云了,那就用 @JacksonTian 朴老师的 alinode 一查就知道了。

rwing

@okoala 为什么 QPS 只有 koa的一半。。。。。。

XGHeaven

如果你只是用于转发请求和渲染页面的话,或许koa更加适合你,而不是egg

bqxu

@atian25 好的,我先试用一下

bqxu

@XGHeaven 是做web 渲染层的, 一部分ajax 请求转发json,其他都是直接返回服务端模版渲染好的html

bqxu

@XGHeaven 主要就是想用egg。。

atian25

@rwing 那个对比不是很恰当的,不是同等条件下。就好像之前某个人吐槽 koa 比 express 差,对比的测试用例却忽略了 koa 的 middleware 是双向的。

egg 默认挂载了更多的中间件,而且模板层这里都默认做了安全处理。

脱离实际业务场景关注 QPS 其实没啥意义,实际线上业务中,框架不会是瓶颈,更多是在于你跟后端交互那块。

bqxu

@atian25 嗯,是的 假设后段 请求 1s 返回接口,模版渲染放回20ms, 平均响应时长 1.5s 处理一个请求 ,开了 8个work, 是不是意味着 并发8 请求 1.5s 左右呢 ?, 并发20 请求 响应时长 就是 3s, 并发40 请求 响应时长 就是 4s, 再多就 挂了。。。

NOOZN

模板缓存有没有开,阿里云硬盘性能太低了典型的石头盘

bqxu

@NOOZN 开了模版缓冲

bqxu

@NOOZN 测试了一下直接 this.body='hi’ qbs=4000+; 模版渲染 假数据(不凋其他api) qbs=400+;

bqxu

@atian25 朴老师的 alinode ,免费版本,啥都没,看不了v8profiler,堆债信息,只有cpu监控这些, qbs 不显示数据,可能是我用的不对把。 集成 egg-alinode,没成功,报错,找不到alinode,有时间在折腾~~