Linux上的.NET Core-LLDB,SOS插件-诊断内存问题

时间:2018-08-23 10:07:22

标签: .net linux debugging .net-core lldb

我有一个.NET Core应用程序,在Windows上使用的内存约150MB,在Linux上使用的内存约1-2GB(不是VM大小,而是实际的专用字节)。它会循环调用Azure HTTP API以检索统计信息。

我想在Linux上诊断问题,但是我不知道这些工具。

我通过gdump进行了转储,并且一直关注https://codeblog.dotsandbrackets.com/net-core-memory-linux/。在下面的情况下,它正在使用一次演出。

我可以说到这一点:

(lldb) sos DumpHeap -stat -min 10000
Statistics:
              MT    Count    TotalSize Class Name
00007f88ebedf438        2       131120 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry[]
00007f88ebed5438        1       202080 System.Collections.Generic.Dictionary`2+Entry[[System.String, System.Private.CoreLib],[Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry, Microsoft.EntityFrameworkCore]][]
00007f88ebec6328        1       202080 System.Collections.Generic.Dictionary`2+Entry[[System.Object, System.Private.CoreLib],[Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry, Microsoft.EntityFrameworkCore]][]
00007f88e8c92660        4       432604 System.Byte[]
00007f88e8cdf228        4       865120 System.String
0000000001e2d2c0       36      6008920      Free

(没有-min选项,我得到的输出太多,无法读取/执行任何操作)

约600 MB的可用空间令人怀疑,但我不知道这是什么意思,如何解决,或尝试其他任何SOS命令。 SOS文档(https://github.com/dotnet/coreclr/blob/master/src/ToolBox/SOS/Strike/sosdocs.txt)看起来不错,但是我的理解水平还不够高,无法在此处进行诊断。

(某些情况:我正在Kubernetes上运行,有一个RAM请求,限制设置为〜2GB,但是这个过程一直存在。我说过,在Windows上它使用的RAM少了。很奇怪。)

编辑:如果没有-min的情况下运行,看起来确实会遇到最大的内存用户。结束了:

...
00007f88ebec5de0     4727       340344 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalClrEntityEntry
00007f88e8c91d00     6484       347528 System.Int32[]
00007f88e9e9e0b8     9434       377360 UNKNOWN
00007f88ea4222d8     4836       386880 Microsoft.Azure.Management.Monitor.Fluent.Models.MetricDefinition
00007f88ebe47f28     9672       464256 Microsoft.Azure.Management.Monitor.Fluent.Models.MetricAvailability
00007f88e9e9f110     9433       528248 UNKNOWN
00007f88e9e9e2f8     9434       528304 UNKNOWN
00007f88ebe42a78     4836       580320 Microsoft.Azure.Management.Monitor.Fluent.Models.MetricDefinitionImpl
00007f88ea423158     3837      1074360 azure2elasticstack.Program+<ProcessMetricAsync>d__10
00007f88e8c92660     1832      2315924 System.Byte[]
00007f88e8cdf228    44713     10688048 System.String
0000000001e2d2c0    22762     22762768      Free
Total 289009 objects
(lldb)

在此处回购:https://github.com/kierenj/proto-azure2elasticstack/tree/master

1 个答案:

答案 0 :(得分:0)

.NET Core 2.1(netcoreapp2.1)的内存使用量下降了很多。