diff --git a/db/dbcommands.cpp b/db/dbcommands.cpp index 6385033d20b..f29e1640fae 100644 --- a/db/dbcommands.cpp +++ b/db/dbcommands.cpp @@ -347,6 +347,14 @@ namespace mongo { bb.append( "available" , connTicketHolder.available() ); bb.done(); } + { + BSONObjBuilder bb( result.subobjStart( "extra_info" ) ); + bb.append("note", "fields vary by platform"); + ProcessInfo p; + p.getExtraInfo(bb); + bb.done(); + } + return true; diff --git a/util/processinfo.h b/util/processinfo.h index 38a63af2efb..83c3bcff300 100644 --- a/util/processinfo.h +++ b/util/processinfo.h @@ -27,6 +27,8 @@ int getpid(); #endif namespace mongo { + + class BSONObjBuilder; class ProcessInfo { public: @@ -42,6 +44,11 @@ namespace mongo { * @return mbytes */ int getResidentSize(); + + /** + * Append platform-specific data to obj + */ + void getExtraInfo(BSONObjBuilder& info); bool supported(); diff --git a/util/processinfo_darwin.cpp b/util/processinfo_darwin.cpp index 1de18eac68d..904f967e9f3 100644 --- a/util/processinfo_darwin.cpp +++ b/util/processinfo_darwin.cpp @@ -90,4 +90,6 @@ namespace mongo { return (int)( ti.resident_size / (1024 * 1024 ) ); } + void ProcessInfo::getExtraInfo(BSONObjBuilder& info) {} + } diff --git a/util/processinfo_linux2.cpp b/util/processinfo_linux2.cpp index 8ff67ad5683..3e00c060fd3 100644 --- a/util/processinfo_linux2.cpp +++ b/util/processinfo_linux2.cpp @@ -19,6 +19,8 @@ #include #include +#include +#include using namespace std; @@ -90,7 +92,6 @@ namespace mongo { return (unsigned long)_rss * 4 * 1024; } - private: int _pid; // The process ID. @@ -203,4 +204,12 @@ namespace mongo { return (int)( p.getResidentSize() / ( 1024.0 * 1024 ) ); } + void ProcessInfo::getExtraInfo(BSONObjBuilder& info){ + struct mallinfo malloc_info = mallinfo(); // structure has same name as function that returns it. (see malloc.h) + info.append("heap_usage_bytes", malloc_info.uordblks); + + LinuxProc p(_pid); + info.append("page_faults", (int)p._maj_flt); + } + } diff --git a/util/processinfo_none.cpp b/util/processinfo_none.cpp index c8623db6355..57f4ca30582 100644 --- a/util/processinfo_none.cpp +++ b/util/processinfo_none.cpp @@ -41,4 +41,6 @@ namespace mongo { return -1; } + void ProcessInfo::getExtraInfo(BSONObjBuilder& info) {} + } diff --git a/util/processinfo_win32.cpp b/util/processinfo_win32.cpp index 111ee069b4b..0f0bf2eb1a1 100644 --- a/util/processinfo_win32.cpp +++ b/util/processinfo_win32.cpp @@ -60,4 +60,5 @@ namespace mongo { return _wconvertmtos( pmc.WorkingSetSize ); } + void ProcessInfo::getExtraInfo(BSONObjBuilder& info) {} }