关于egg.js 性能,求指导
发布于 5 个月前 作者 bqxu 791 次浏览 来自 问答

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

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

20 回复

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

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

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

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

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

@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, };

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

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

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

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

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

@atian25 好的,我先试用一下

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

@XGHeaven 主要就是想用egg。。

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

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

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

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

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

@NOOZN 开了模版缓冲

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

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

回到顶部