-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
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
Fix OOM of thumbnail generation #7120
Conversation
如果能在前端增加懒加载的话,效果会更好一些。目前增加 concurrent 可能会引起队列堵塞,比如单页过多 thumbnails 生成任务,切换页面后前面的生成任务能否取消,切换页面后是否会因为队列堵塞无法及时生成当前页面缩略图 |
目前前端请求略缩图应该是应用了懒加载的; |
此 PR 貌似会引起 goroutine 泄漏。当 local driver config 被修改时,旧的携程不会退出。 能不能让我改改,thumbnails 生成应该放在 request handler goroutine 以避免 ffmpeg 操作引起 fatal panic。此外我还想使用令牌桶控制 concurrent,并加入 context 以允许控制超时或取消 |
加入 context 支持只是支持取消的后端部分,取消操作主要还是需要修改前端。除此之外还需要考虑前端等待过久请求超时如何处理的问题 |
这个问题我没注意,之后可以改进一下逻辑。
如果大佬想要修改的话也可以,你是想获得仓库的访问权限还是fork到你的仓库修改?我不是很清楚怎样给你权限 |
我 fork 然后 PR 到你的仓库吧 |
好的好的 |
…eration concurrency
Muione#1 变更:
|
…nail generation concurrency" This reverts commit 7ff81ba.
refactor: new TokenBucket alg, fixed goroutine leak, support context controlling
或者我直接从我的分支提新的 PR 也行,你之前的 commit 会被保留 |
我已发起新的 PR,此 PR 可以直接关闭 |
好的 |
对一些内存较少的服务器,
本机存储
开启略缩图后,如果目录图像文件过多,访问时程序会启用大量线程生成略缩图,通常会使得alist
占用大量内存,有可能导致服务器卡死。解决思路是使用任务队列对前端发起请求进行串行处理,以限制单次并发数量从而限制内存占用,512MB 的服务器上进行下列测试:
alist
占用最大内存为 72MB,平均值 72MB;alist
占用最大内存为 200MB,平均值 130MB;alist
占用最大内存为 260MB,平均值 190MB;应该可以解决爆内存的问题。
设置选项:
在 LocalDriver 里添加了
Thumb concurrency
参数可以控制生成略缩图的并发数量(对前端不熟悉,希望有大佬能汉化一下提示:1G 以上内存的服务器可以设置
Thumb concurrency >= 8
以加快略缩图生成,具体自行测试。close #7082