62 lines
1.7 KiB
Diff
62 lines
1.7 KiB
Diff
|
--- ./src/OSD/OSD_MemInfo.cxx.old
|
||
|
+++ ./src/OSD/OSD_MemInfo.cxx
|
||
|
@@ -35,6 +35,9 @@
|
||
|
#include <sstream>
|
||
|
#include <fstream>
|
||
|
|
||
|
+#include <sys/time.h>
|
||
|
+#include <sys/resource.h>
|
||
|
+
|
||
|
#include <OSD_MemInfo.hxx>
|
||
|
|
||
|
#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)
|