hi,
春哥, 最近在用nginx+subrequest+upstream 开发批量插入数据到多个后端服务器。
场景:
当用户请求一个大的数据包到nginx, 然后nginx进行解析,模块会根据json信息,解析成 几千个子请求然后同时去后端请求数据。 得到响应的数据的时候,
我会再次进行解析,然后在进行第二次的子请求(几千个左右), 然后等待子请求响应, 把子请求的数据合并,输出给用户。
也就是说, 我主请求会发 “多次” 子请求,来得到数据。一次子请求(几千个到上万个不等)
问题:
1. 是不是所有的子请求的数据都不会在请求完就释放内存, 而是等待主请求请求完毕之后才释放内存?
2. 由于我的场景比较特殊, 用户批量插入数据, 数据量非常多, 我会解析成几千个子请求去后端服务器请求数据, 这对于subrequest 过多的情况,是不是非常不适合。
或者说, 我主请求没处理完的时候, 我主动去把请求过的子请求给释放掉内存?
3. 如果用户请求的数据很大, 导致子请求非常的多, 那物理内存会一直暴涨,也没有回收。
4. 如果用ngx+lua 那在lua里面同时开很多”协程“ ,这样是不是性能和内存会不会也会有问题? (因为我发现用ngx+lua 在大数据包,通过lua轻线程的方式,内存消耗不大)
附近里面是内存火焰图, 春哥有空帮忙看看。 这种场景是几千个子请求的场景,是比较变态。
../sample-bt-leaks.sxx -x $1 --arg time=5 -D STP_NO_OVERLOAD -D MAXMAPENTRIES=20000 > $1.bt
/download/FlameGraph-master/stackcollapse-stap.pl $1.bt > $1.cbt
/download/FlameGraph-master/flamegraph.pl --countname=bytes --title="Memory Leak Flame Graph" $1.cbt > $1.svg
https://github.com/openresty/stapxx#sample-bt-leaks
sample-bt-leaks.sxx 关于这个脚本的一些参数有说明吗?
以及我怎么去看内存火焰图, 我发现里面的数据很大,都超过我的机器的内存了。 好像不是很准确, 求春哥指点。
mapped: 82099308K writeable/private: 81985544K shared: 1028K
ps: 我已经被子请求折腾的不行了, 打算直接用 ngx+lua+ffi 的形式去开发。
Attachment:
11660.svg
Description: image/svg
Attachment:
12696.svg
Description: image/svg
Attachment:
12183.svg
Description: image/svg