"configProperties": {
"System.GC.Concurrent": false,
"System.GC.Server": false
}
有什么办法自动回收吗?
既跑了mysql,又跑了redis,只占用了2.3G内存,这很正常
主要是 dotnet 占用1.5G 感觉有点多,
@weisp: dotnet 的确有点多,我们的生产环境一个 dotnet 进程占用内存不到 500 M
@dudu: 我放在内存里的缓存设了滑动过期时间,应该是会自动回收的呀,很奇怪,使用量一直缓慢增加,就是没看到有下降的动静
@dudu: 但有一部份常用数据缓存优先级设置为高,不知道跟这个有没有关系,
_memoryCache.Set(
cacheKey,
navigations,
new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromMinutes(_appSettings.Redis_ExpiresIn))
.SetPriority(CacheItemPriority.High));
@dudu: 我认为重要的数据大量的用了 CacheItemPriority.High
@dudu: .net core 有没有什么方法列出所有缓存?原来的.net是有的,.net core 里面没找到,目前我只能自已用列表存储,
@dudu:
今天nginx访问日志确实也比较多,有一百多M
@weisp: 遇见过类似问题,可能是在同步方法中调用异步方法引起的,详见 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长
@weisp: 上面贴的日志内容太多了,建议去掉
@dudu: 好像没有同步方法中调用异步方法,公共构造函数里都用的同步,其它的地方用的是异步,之前还好,没有这么严重,最近升级为.net core 2.1.2 后才这样
@weisp: 问题很奇怪,建议仔细检查代码,比如是否单例引用了非单例的实例,LINQ查询是否会造成全表加载到内存中查询,HttpClient 的使用是否有问题
另一台服务器没有这个问题,有没有可能有人在一直攻击我?我看日志里面有一堆的垃圾访问,注入
@dudu: 系统上线有一年多了,应该不是LINQ查询问题
单例引用了非单例 这个我不是很明白
@dudu:
这种包括条件in 会造成全表加载到内存中查询吗?
@weisp: 你可以看一下日志,如果出现全表加载到内存的情况,EF Core 会在日志中报警
@dudu: 我把应用程序降级成了.net core 2.0 ,有一个好处就是,内存到达高峰后会自动重启还是回收我不知道,内存回收,然后又慢慢升高,大概24小时一周期,
但如果是.net core 2.1 内存升高后应用还在坚持,但静态文件不能访问,
为什么我的内存在不忙里不回收呢?但其它压力小点的服务器不会,只有一台访问多的服务器会这样
@weisp: 很奇怪,我们用 .net core 2.1 没遇到这个问题
@dudu: 我盯着看,内存上升一点,会回收一点点,但缓慢上升的速度比回收的多,所以慢慢的还是会满,有什么办法手动回收内存吗?
@weisp: 建议排查一下代码是否存在内存泄漏问题,如果真的想手动回收,那就重启进程
@dudu: GC.Collect(); // 强制进行垃圾回收
我定时调用这个,没有效果
@weisp: 问题不在没有回收,是回收不了,比如在静态类中的字段中引用了非静态类的实例,那个实例就永远不会被回收
@dudu: 我为了方便在视图里方便调用,写了几个这些的静态方法,只有几个这样的方法,但有大量调用它们,ViewModel model 这个里面包含了一些注入的上下文
@weisp: 日志中有没有EF Core的告警
@dudu: 没有
@dudu:
这是.net 2.0 运行中的线程状态
我也遇到这个问题,找了半天也没找到原因。3.1版本的
遇见过类似问题,可能是在同步方法中调用异步方法引起的,详见 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长
– dudu 6年前