New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
用SaveToFile文件上传后,一直占着虚拟内存没有释放 #42
Comments
我想说关于虚拟内存请看这个http://golang.org/doc/faq#Why_does_my_Go_process_use_so_much_virtual_memory 这个和beego的保存文件好像没啥关系。 还有你说的C盘爆满是什么意思? |
如果你有什么问题重新打开这个issue吧,给你发了也没有反馈 |
我发现 当我用原生的来写是可以马上释放 C盘的临时文件空间的
|
C盘的临时空间是指什么?我没在window下面测试过呢 |
就是C盘的空间啊,一般上传会占用一定的空间,但上传完会马上释放的,现在用beego是不会释放,用原生的写是可以释放 |
内存空间?还是什么?你怎么查看的啊? |
就临时文件啊,直接实时刷新看C盘的剩余容量,而且我需要用360安全卫士才能释放一下空间,也不是每次都能释放到 |
经过我刚才测试 发现以下代码是可以马上释放 C盘占用了的空间的 test.go 文件
app.conf 文件
upload.tpl 文件
|
我在想是不是和你掉用了两次这个有关系
|
而且我尝试过 改写你源码的 如下: controller.go
在把你的beego 重新 go build 然后 go install 后
|
把上面两行换成
|
我觉得是this.GetFile("uploadfile")这个掉用了两次引起的 |
果然是用了两次,应该是 第一次获取的时候获取文件名,然后内存占用了没有释放。 |
在第一次获取名称的时候改成下面的就可以正常了,上传完后占用的释放到了
|
我怎么感觉是go的内置bug呢,不知道go1.1存在不存在这个问题,你用的是go1.0.3版本吧 |
执行go version 返回以下信息
|
不是吧,你们解决了?我怎么还是内存不释放啊 |
我只是用任务管理器看一下程序占用的内存 |
怎么解决啊,我用上面原生的代码也是这样的情况 |
@NormanZhang 你可以看下 处理文件上传 中,讲述 MaxMemory 的部分,你可以调小 beego.MaxMemory |
@slene 我调了,完全不起作用啊,任务管理器里面还是占用这么多 |
@slene 是这句话吧? |
默认是 64M,调小一下,你调的多少呢?试一下 10M
|
无效,只上传一个100兆的文件,内存占用依然需要200M,而且上传结束之后,内存不释放 |
@slene 忘了@了 |
不立即释放,是对的,但内存占用减少了吧? |
@slene 木有啊 |
@astaxie 1.3还是一样的崩溃,默认配置,上传一个70MB的文件,4到6次,必定崩
|
f, h, _ := this.GetFile("uploadfile") 如果用户POST里面的Header中,name不等于“uploadfile”,那么f.Close()会触发这个报错: |
f, h, _ := this.GetFile("uploadfile") 自己把 error 处理省掉了。 defer 之前处理 error 不就好了 beego 的文档里关于文件上传的章节,也写的有问题。没有把错误处理放到前面去 |
发现在windows中用SaveToFile保存上传后的文件,一直占着虚拟内存没有释放,再上传多几次C盘就满了
有什么方法比较优化的呢?
代码如下:
The text was updated successfully, but these errors were encountered: