<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoPlainText">Hello,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Our backend service running on Mono 4.2.2 on Linux is experiencing an unmanaged memory leak. When running our stress tests for several hours, we see the managed heap sit around 50 MB, while private memory keeps growing until the process
 is killed because of OOM. I am therefore attempting to use valgrind to find the culprit, but I am getting so many leaks detected that I think many must be false positives, so I thought I would ask here for some guidance about which are safe to suppress or
 any other valgrind + mono tricks you can share.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">The vast majority of leaks reported have call stacks that closely match one of the following:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">==16846== 4 bytes in 1 blocks are definitely lost in loss record 74 of 19,903<o:p></o:p></p>
<p class="MsoPlainText">==16846==    at 0x4C26FEF: calloc (vg_replace_malloc.c:711)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x62D1D9: monoeg_malloc0 (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x4870F2: decode_exception_debug_info (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x488975: mono_aot_find_jit_info (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x53C3A7: mono_jit_info_table_find_internal (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x493C04: mini_jit_info_table_find_ext (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x4988FB: mini_add_method_trampoline (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x499067: common_call_trampoline_inner (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x403217C: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x10D3FB63: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x10D3F41B: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x10D3F117: ???<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">==16846== 12 bytes in 1 blocks are definitely lost in loss record 1,172 of 19,903<o:p></o:p></p>
<p class="MsoPlainText">==16846==    at 0x4C2828A: malloc (vg_replace_malloc.c:299)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x62D221: monoeg_malloc (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x55B8EF: mono_metadata_type_dup (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x49FC4B: get_shared_gparam (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x49FE70: get_shared_inst (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x4A073A: mini_get_shared_method_full (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x414723: lookup_method (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x4147FA: mono_jit_compile_method_with_opt (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x414B9A: mono_jit_compile_method (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x498DA4: common_call_trampoline_inner (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x403405C: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x10D2DCA7: ???<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">==16846== 10 bytes in 1 blocks are definitely lost in loss record 739 of 19,903<o:p></o:p></p>
<p class="MsoPlainText">==16846==    at 0x4C2828A: malloc (vg_replace_malloc.c:299)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x62D221: monoeg_malloc (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x62BA8C: monoeg_g_utf16_to_utf8 (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x5A8646: mono_string_to_utf8_checked (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x5A885B: mono_string_to_utf8 (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x52DE3C: ves_icall_Type_GetNestedTypes (in /usr/bin/mono-sgen)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x120D4256: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0xE338A78: System_Type_GetMember_string_System_Reflection_BindingFlags (type.cs:806)<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x40C09EF: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x1259A6AF: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x73: ???<o:p></o:p></p>
<p class="MsoPlainText">==16846==    by 0x141D191D: ???<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Are these valid leaks or is valgrind confused/misconfigured? I am using the following command:<o:p></o:p></p>
<p class="MsoPlainText">valgrind --tool=memcheck -v --leak-check=full --log-file=val.txt --smc-check=all mono program.exe<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks for any input you can offer,<o:p></o:p></p>
<p class="MsoPlainText">Matt Zinkevicius<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>