diff --git a/src/config.h b/src/config.h index b8723e7ce..1d4cb5835 100644 --- a/src/config.h +++ b/src/config.h @@ -87,6 +87,7 @@ #include #ifdef _DTRACE_VERSION #define HAVE_EVPORT 1 +#define HAVE_PSINFO 1 #endif #endif diff --git a/src/zmalloc.c b/src/zmalloc.c index a04ecacae..2f9b4029d 100644 --- a/src/zmalloc.c +++ b/src/zmalloc.c @@ -433,6 +433,27 @@ size_t zmalloc_get_rss(void) { return 0L; } +#elif defined(HAVE_PSINFO) +#include +#include +#include + +size_t zmalloc_get_rss(void) { + struct prpsinfo info; + char filename[256]; + int fd; + + snprintf(filename,256,"/proc/%d/psinfo",getpid()); + + if ((fd = open(filename,O_RDONLY)) == -1) return 0; + if (ioctl(fd, PIOCPSINFO, &info) == -1) { + close(fd); + return 0; + } + + close(fd); + return info.pr_rssize; +} #else size_t zmalloc_get_rss(void) { /* If we can't get the RSS in an OS-specific way for this system just