.NET Core Process APIs not Consistent (or always useful) in all situations
The Process APIs should return accurate and useful values in all situations. I wrote a simple app that uses all the memory APIs I could find. I am happy to add more if people direct me to them.
Major take-aways:
- Multiple properties return a value of 0 on Unix.
Process.MaxWorkingSet!=memory.limit_in_byteswhen memory limitedProcess.WorkingSet64!=memory.usage_in_bytes
Related issues:
On Windows
C:\testapps\memory>dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27514-07 OS: Microsoft Windows 10.0.17763 OS Arch: X64 ***Working set**** Process.MinWorkingSet: 204800 Process.MaxWorkingSet: 1413120 Process.PeakWorkingSet64: 15667200 Process.WorkingSet64: 15663104 ***Memory********* Process.PeakPagedMemorySize64: 267993088 Process.PrivateMemorySize64: 267993088 Process.NonpagedSystemMemorySize64: 42288 Process.PagedMemorySize64: 267993088 Process.PagedSystemMemorySize64: 138040 ***Virtual memory Process.VirtualMemorySize64: 2307580309504 Process.PeakVirtualMemorySize64: 2307580309504
On Linux
rich@tofino:~/memory$ dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27514-07 OS: Linux 3.10.105-bsp-1.2 dotnet/corefx#2 SMP PREEMPT Sat Oct 27 19:24:05 IST 2018 OS Arch: Arm64 ***Working set**** Process.MinWorkingSet: 0 Process.MaxWorkingSet: 9223372036854775807 Process.PeakWorkingSet64: 0 Process.WorkingSet64: 18436096 ***Memory********* Process.PeakPagedMemorySize64: 0 Process.PrivateMemorySize64: 0 Process.NonpagedSystemMemorySize64: 0 Process.PagedMemorySize64: 0 Process.PagedSystemMemorySize64: 0 ***Virtual memory Process.VirtualMemorySize64: 2735525888 Process.PeakVirtualMemorySize64: 0 ***CGroup********* CGroup usage: 1644941312 CGroup memory limit: 9223372036854775807
On macOS
Richards-MacBook-Pro:memory rich$ dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27514-07 OS: Darwin 18.2.0 Darwin Kernel Version 18.2.0: Thu Dec 20 20:46:53 PST 2018; root:xnu-4903.241.1~1/RELEASE_X86_64 OS Arch: X64 ***Working set**** Process.MinWorkingSet: 0 Process.MaxWorkingSet: 9223372036854775807 Process.PeakWorkingSet64: 0 Process.WorkingSet64: 18923520 ***Memory********* Process.PeakPagedMemorySize64: 0 Process.PrivateMemorySize64: 0 Process.NonpagedSystemMemorySize64: 0 Process.PagedMemorySize64: 0 Process.PagedSystemMemorySize64: 0 ***Virtual memory Process.VirtualMemorySize64: 6893395968 Process.PeakVirtualMemorySize64: 0
On WSL
rich@phantomlake:/mnt/c/testapps/memory$ ~/dotnet/dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27514-07 OS: Linux 4.4.0-17763-Microsoft dotnet/corefx#253-Microsoft Mon Dec 31 17:49:00 PST 2018 OS Arch: X64 ***Working set**** Process.MinWorkingSet: 0 Process.MaxWorkingSet: 9223372036854775807 Process.PeakWorkingSet64: 0 Process.WorkingSet64: 17985536 ***Memory********* Process.PeakPagedMemorySize64: 0 Process.PrivateMemorySize64: 0 Process.NonpagedSystemMemorySize64: 0 Process.PagedMemorySize64: 0 Process.PagedSystemMemorySize64: 0 ***Virtual memory Process.VirtualMemorySize64: 84865474560 Process.PeakVirtualMemorySize64: 0
On Linux running in a Debian container on Windows
C:\testapps\memory>docker run --rm -v c:\testapps\memory:/app -w /app mcr.microsoft.com/dotnet/core-nightly/sdk:3.0 dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27508-07 OS: Linux 4.9.125-linuxkit dotnet/corefx#1 SMP Fri Sep 7 08:20:28 UTC 2018 OS Arch: X64 ***Working set**** Process.MinWorkingSet: 0 Process.MaxWorkingSet: 9223372036854775807 Process.PeakWorkingSet64: 0 Process.WorkingSet64: 25559040 ***Memory********* Process.PeakPagedMemorySize64: 0 Process.PrivateMemorySize64: 0 Process.NonpagedSystemMemorySize64: 0 Process.PagedMemorySize64: 0 Process.PagedSystemMemorySize64: 0 ***Virtual memory Process.VirtualMemorySize64: 2689052672 Process.PeakVirtualMemorySize64: 0 ***CGroup********* CGroup usage: 76718080 CGroup memory limit: 9223372036854771712
On Linux running in a Debian container on Windows -- memory-limited to 100MB
C:\testapps\memory>docker run -m 100mb --rm -v c:\testapps\memory:/app -w /app mcr.microsoft.com/dotnet/core-nightly/sdk:3.0 dotnet run ***Configuration** Build: .NET Core 3.0.0-preview4-27508-07 OS: Linux 4.9.125-linuxkit dotnet/corefx#1 SMP Fri Sep 7 08:20:28 UTC 2018 OS Arch: X64 ***Working set**** Process.MinWorkingSet: 0 Process.MaxWorkingSet: 9223372036854775807 Process.PeakWorkingSet64: 0 Process.WorkingSet64: 25604096 ***Memory********* Process.PeakPagedMemorySize64: 0 Process.PrivateMemorySize64: 0 Process.NonpagedSystemMemorySize64: 0 Process.PagedMemorySize64: 0 Process.PagedSystemMemorySize64: 0 ***Virtual memory Process.VirtualMemorySize64: 2688528384 Process.PeakVirtualMemorySize64: 0 ***CGroup********* CGroup usage: 72470528 CGroup memory limit: 104857600