大佬们,请教一个问题,我服务有个需求,需要批量下载图片,大约一次下载2.300条,一张图片大约150kb左右,并在内存中处理,处理完成之后,将这些图片的base64上传到另一个服务器(第三方的),然后清除图片List。然后循环。
我使用benchmark测试,使用Parallel.ForEach下载200张图片,然后放入ConcurrentQueue<string>中。结果是 Gen 0是4000+,Allocated是20+MB。我有个疑问:
1、这里4000+的GC 0 正不正常呢?
2、这里有没有办法不走GC,等我的一个循环执行完,我自己清除图片缓存呢?
多谢了.
我的服务一直重复这个事情,在k8s中运行,我发现服务又被重启了好几次,我将k8s的健康检查时间改长了,就没有重启的情况了,我猜测会不会是GC导致程序暂停,所以导致k8s的健康检查请求失败
requests.memory
可能会影响到GC,根据你的这个场景,建议设置为程序运行过程中所需的最高内存requests.memory
是指的k8s中的内存上限嘛?我服务的pod没有设置限制内存和cpu@骑着蚊子去太阳:
kubectl describe pod pod-id
可以查看@dudu: 好的好的,大佬,非常感谢,我再监控一段时间看。
那请问下代码上有没有什么优化的呢?
@骑着蚊子去太阳: 建议使用 asnyc 异步方法下载图片,用 Task.WhenAll()
并行
@dudu: 我用的 await Parallel.ForEachAsync
这种方式可以吗?
@骑着蚊子去太阳: 可以
@dudu: 好的好的,非常感谢。