--- ./src/OSD/OSD_MemInfo.cxx.old +++ ./src/OSD/OSD_MemInfo.cxx @@ -35,6 +35,9 @@ #include #include +#include +#include + #include #if defined(__EMSCRIPTEN__) @@ -161,18 +164,22 @@ || IsActive (MemWorkingSetPeak)) { // /proc/%d/status is not emulated - get more info from mallinfo() - const struct mallinfo aMI = mallinfo(); + // mallinfo() not available with musl. We use getrusage to approximate it + // with the maximum resident set size + struct rusage ru = { .ru_maxrss = 0 }; + getrusage(RUSAGE_SELF, &ru); if (IsActive (MemHeapUsage)) { - myCounters[MemHeapUsage] = aMI.uordblks; + myCounters[MemHeapUsage] = ru.ru_maxrss; } if (IsActive (MemWorkingSet)) { - myCounters[MemWorkingSet] = aMI.uordblks; + myCounters[MemWorkingSet] = ru.ru_maxrss; } if (IsActive (MemWorkingSetPeak)) { - myCounters[MemWorkingSetPeak] = aMI.usmblks; + //usmblks is always 0 + myCounters[MemWorkingSetPeak] = 0; } } if (IsActive (MemVirtual)) @@ -182,18 +189,9 @@ #elif (defined(__linux__) || defined(__linux)) if (IsActive (MemHeapUsage)) { - #if defined(__GLIBC__) && defined(__GLIBC_PREREQ) - #if __GLIBC_PREREQ(2,33) - #define HAS_MALLINFO2 - #endif - #endif - - #ifdef HAS_MALLINFO2 - const struct mallinfo2 aMI = mallinfo2(); - #else - const struct mallinfo aMI = mallinfo(); - #endif - myCounters[MemHeapUsage] = aMI.uordblks; + struct rusage ru = { .ru_maxrss = 0 }; + getrusage(RUSAGE_SELF, &ru); + myCounters[MemHeapUsage] = ru.ru_maxrss; } if (!IsActive (MemVirtual)