关于常驻内存RES,pprof,heap,threadcreate的疑问

ponpon_ · · 4217 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

小弟写了个简单后台用来接收POST请求上传过来的文件,并保存到后台本地。在做测试的时候,每一次请求上传5个文件,5个文件大小总和大概在300-400k的范围,测试的时候模拟客户端并发1000个POST上传文件。后台处理完1000请求后 RES直接上到500MB,查看/debug/pprof/下的threadcreate也直接上到400多个,再并发第二次,第三次... 1000个POST请求,RES在600多MB就不再涨了,threadcreate涨到570以后,增长速度就放缓了,此后七八分钟不再有请求发送RES慢慢再回降到100MB左右,但是threadcreate一直没有降过。上个图吧 ##1.服务开启: ####RES: +![开启服务.jpg](http://studygolang.qiniudn.com/150910/05e61f18e896be39081aa832494f4fe3.jpg) ####heap: +![开启服务_heap.jpg](http://studygolang.qiniudn.com/150910/90ca275ae3b5dde5859a9afbe82c487f.jpg) ##2.第一次并发1000个POST请求: ####处理完请求,RES: +![第一次并发1000跑完_mem.jpg](http://studygolang.qiniudn.com/150910/5b4589a869e13b7fb431079cfcad96b7.jpg) ####处理请求中的heap: +![第一次并发1000_heap.jpg](http://studygolang.qiniudn.com/150910/f75aa423720214da1ba2217ba2af0eee.jpg) ####处理完请求的heap: +![第一次并发1000跑完_heap.jpg](http://studygolang.qiniudn.com/150910/73622b5dcce0756f4cedf3c8afe3f3a7.jpg) heap上看不大懂,三个问题: +**1)是否只需关注inuse?** +**2)idle是出于空闲的堆,还未把内存返回给系统?** +**3)HeapReleased是指已经还给系统的内存容量?** ##3.过一段时间,期间没有任何请求,RES就降到100MB左右 ####gc截图: +![gc.jpg](http://studygolang.qiniudn.com/150910/2ace086a4697ad5fda5c072cde61e927.jpg) gc也不是很明白,>__< scvg10: 590 MB released scvg10: inuse: 21, idle: 591, sys: 613, released: 590, consumed: 22 (MB) 是指已经释放掉590MB的内存给系统了?那为什么(5633205-5619348) objects 对象个数没降下来呢? go是否因为避免频繁的申请释放内存,才没有很迅速将内存还给系统,600MB->100MB,期间没任何请求,等了大概7分钟吧 最后,就是threadcreate为什么不会降下来呢,开了那么多线程何用呢? 希望大神指点一二~~谢谢啦!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4217 次点击  
加入收藏 微博
1 回复  |  直到 2016-12-08 06:08:59
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传