首页 新闻 会员 周边

服务器很闲,内存使用量不掉下去

0
悬赏园豆:5 [已解决问题] 解决于 2019-04-29 18:47

"configProperties": {
"System.GC.Concurrent": false,
"System.GC.Server": false
}

有什么办法自动回收吗?

weisp的主页 weisp | 初学一级 | 园豆:3
提问于:2018-08-06 21:51

遇见过类似问题,可能是在同步方法中调用异步方法引起的,详见 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长

dudu 5年前
< >
分享
最佳答案
0

既跑了mysql,又跑了redis,只占用了2.3G内存,这很正常

收获园豆:5
dudu | 高人七级 |园豆:31007 | 2018-08-06 21:59

主要是 dotnet 占用1.5G 感觉有点多,

weisp | 园豆:3 (初学一级) | 2018-08-06 22:19

@weisp: dotnet 的确有点多,我们的生产环境一个 dotnet 进程占用内存不到 500 M

dudu | 园豆:31007 (高人七级) | 2018-08-06 22:37

@dudu: 我放在内存里的缓存设了滑动过期时间,应该是会自动回收的呀,很奇怪,使用量一直缓慢增加,就是没看到有下降的动静

weisp | 园豆:3 (初学一级) | 2018-08-06 23:04

@dudu: 但有一部份常用数据缓存优先级设置为高,不知道跟这个有没有关系,

_memoryCache.Set(
                            cacheKey,
                            navigations,
                            new MemoryCacheEntryOptions()
                            .SetSlidingExpiration(TimeSpan.FromMinutes(_appSettings.Redis_ExpiresIn))
                            .SetPriority(CacheItemPriority.High));
weisp | 园豆:3 (初学一级) | 2018-08-06 23:11

@dudu: 我认为重要的数据大量的用了 CacheItemPriority.High

weisp | 园豆:3 (初学一级) | 2018-08-06 23:12

@dudu: .net core 有没有什么方法列出所有缓存?原来的.net是有的,.net core 里面没找到,目前我只能自已用列表存储,

weisp | 园豆:3 (初学一级) | 2018-08-06 23:16

@dudu:

今天nginx访问日志确实也比较多,有一百多M

weisp | 园豆:3 (初学一级) | 2018-08-06 23:25

@weisp: 遇见过类似问题,可能是在同步方法中调用异步方法引起的,详见 .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长

dudu | 园豆:31007 (高人七级) | 2018-08-07 09:52

@weisp: 上面贴的日志内容太多了,建议去掉

dudu | 园豆:31007 (高人七级) | 2018-08-07 09:53

@dudu: 好像没有同步方法中调用异步方法,公共构造函数里都用的同步,其它的地方用的是异步,之前还好,没有这么严重,最近升级为.net core 2.1.2 后才这样

weisp | 园豆:3 (初学一级) | 2018-08-07 11:41

@weisp: 问题很奇怪,建议仔细检查代码,比如是否单例引用了非单例的实例,LINQ查询是否会造成全表加载到内存中查询,HttpClient 的使用是否有问题

dudu | 园豆:31007 (高人七级) | 2018-08-07 13:09

另一台服务器没有这个问题,有没有可能有人在一直攻击我?我看日志里面有一堆的垃圾访问,注入

weisp | 园豆:3 (初学一级) | 2018-08-07 15:11

@dudu: 系统上线有一年多了,应该不是LINQ查询问题

单例引用了非单例 这个我不是很明白

weisp | 园豆:3 (初学一级) | 2018-08-07 15:56

@dudu:
这种包括条件in 会造成全表加载到内存中查询吗?

weisp | 园豆:3 (初学一级) | 2018-08-09 10:18

@weisp: 你可以看一下日志,如果出现全表加载到内存的情况,EF Core 会在日志中报警

dudu | 园豆:31007 (高人七级) | 2018-08-09 10:28

@dudu: 我把应用程序降级成了.net core 2.0 ,有一个好处就是,内存到达高峰后会自动重启还是回收我不知道,内存回收,然后又慢慢升高,大概24小时一周期,
但如果是.net core 2.1 内存升高后应用还在坚持,但静态文件不能访问,
为什么我的内存在不忙里不回收呢?但其它压力小点的服务器不会,只有一台访问多的服务器会这样

weisp | 园豆:3 (初学一级) | 2018-08-17 09:04

@weisp: 很奇怪,我们用 .net core 2.1 没遇到这个问题

dudu | 园豆:31007 (高人七级) | 2018-08-17 09:09

@dudu: 我盯着看,内存上升一点,会回收一点点,但缓慢上升的速度比回收的多,所以慢慢的还是会满,有什么办法手动回收内存吗?

weisp | 园豆:3 (初学一级) | 2018-08-25 22:21

@weisp: 建议排查一下代码是否存在内存泄漏问题,如果真的想手动回收,那就重启进程

dudu | 园豆:31007 (高人七级) | 2018-08-26 17:06

@dudu: GC.Collect(); // 强制进行垃圾回收
我定时调用这个,没有效果

weisp | 园豆:3 (初学一级) | 2018-08-26 17:39

@weisp: 问题不在没有回收,是回收不了,比如在静态类中的字段中引用了非静态类的实例,那个实例就永远不会被回收

dudu | 园豆:31007 (高人七级) | 2018-08-26 17:44

@dudu: 我为了方便在视图里方便调用,写了几个这些的静态方法,只有几个这样的方法,但有大量调用它们,ViewModel model 这个里面包含了一些注入的上下文

weisp | 园豆:3 (初学一级) | 2018-08-26 18:17

@weisp: 日志中有没有EF Core的告警

dudu | 园豆:31007 (高人七级) | 2018-08-26 19:11

@dudu: 没有

weisp | 园豆:3 (初学一级) | 2018-08-26 21:49

@dudu:

这是.net 2.0 运行中的线程状态

weisp | 园豆:3 (初学一级) | 2018-09-08 10:14
其他回答(1)
0

我也遇到这个问题,找了半天也没找到原因。3.1版本的

冰封的心 | 园豆:178 (初学一级) | 2020-03-20 15:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册