首页 新闻 会员 周边

关于.NET Core中性能优化

0
悬赏园豆:20 [已解决问题] 解决于 2022-06-09 14:09

大佬们,请教一个问题,我服务有个需求,需要批量下载图片,大约一次下载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的健康检查请求失败

骑着蚊子去太阳的主页 骑着蚊子去太阳 | 初学一级 | 园豆:89
提问于:2022-06-09 12:08
< >
分享
最佳答案
1
  • requests.memory 可能会影响到GC,根据你的这个场景,建议设置为程序运行过程中所需的最高内存
  • 建议看一下健康检查失败对应的 pod 日志
收获园豆:20
dudu | 高人七级 |园豆:30994 | 2022-06-09 12:23
  • requests.memory 是指的k8s中的内存上限嘛?我服务的pod没有设置限制内存和cpu
  • 目前pod重启,监控不到,也就是我有时候去看看,然后发现 重启次数 增加了
骑着蚊子去太阳 | 园豆:89 (初学一级) | 2022-06-09 12:40

@骑着蚊子去太阳:

  • 是内存下限
  • kubectl describe pod pod-id 可以查看
dudu | 园豆:30994 (高人七级) | 2022-06-09 13:44

@dudu: 好的好的,大佬,非常感谢,我再监控一段时间看。
那请问下代码上有没有什么优化的呢?

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2022-06-09 13:52

@骑着蚊子去太阳: 建议使用 asnyc 异步方法下载图片,用 Task.WhenAll() 并行

dudu | 园豆:30994 (高人七级) | 2022-06-09 13:59

@dudu: 我用的 await Parallel.ForEachAsync 这种方式可以吗?

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2022-06-09 14:03

@骑着蚊子去太阳: 可以

dudu | 园豆:30994 (高人七级) | 2022-06-09 14:05

@dudu: 好的好的,非常感谢。

骑着蚊子去太阳 | 园豆:89 (初学一级) | 2022-06-09 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册