我们有一个在C#中开发的WCF服务,它运行在一个生产环境中,每隔几个小时就会崩溃一次,而没有任何可观察到的模式。内存使用量将在250 4gb左右徘徊一段时间,然后突然间内存使用量开始上升,直到它以4GB的OutOfMemoryException崩溃(这是一个32位进程)。
我们很难识别问题,我们记录的异常来自代码中不同的位置,可能是来自试图使用某些内存的另一个请求,并且它接收到了异常。
当进程为4gb时,我们已经进行了内存转储,当崩溃发生时,内存中有一个~750 k数据库对象的列表。我们已经查找了这些对象的查询,但无法精确地确定加载整个表的查询。该服务使用EF6调用数据库。
另外要注意的是,这个问题从来没有发生在我们的预生产环境中。数据库中的数据在我们的生产前环境中已经足够了,如果要加载整个表的话,就会发生这种情况。可能是具有特定参数的特定调用触发了此问题,但我们无法精确定位。
我想不出下一步该做什么来解决我们的问题了。在这种情况下,有什么工具可以帮助我们吗?
谢谢
发布于 2019-12-04 16:27:01
如果要捕获所有SQL并使用实体,则可以打印出类似于此Context.Database.Log = s => Debug.Print(s);的查询。
如果您处理这一点,可以将其输出到变量,并将结果保存到文本文件或Db中。您必须围绕所有Db调用包装它-不确定您的项目有多大?
Context.Database.Log = null;
把它关掉
https://stackoverflow.com/questions/59180220
复制相似问题