Reference: https://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-runtime-using-c
| 41 | |
| 42 | // Reference: https://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-runtime-using-c |
| 43 | void ProcessMemUsage(double* vm_usage, double* resident_set) { |
| 44 | *vm_usage = 0.0; |
| 45 | *resident_set = 0.0; |
| 46 | |
| 47 | #ifdef __linux__ |
| 48 | // 'file' stat seems to give the most reliable results |
| 49 | std::ifstream stat_stream("/proc/self/stat", std::ios_base::in); |
| 50 | ProcStat proc_stat; |
| 51 | stat_stream >> proc_stat.pid >> proc_stat.comm >> proc_stat.state >> proc_stat.ppid |
| 52 | >> proc_stat.pgrp >> proc_stat.session >> proc_stat.tty_nr >> proc_stat.tpgid |
| 53 | >> proc_stat.flags >> proc_stat.minflt >> proc_stat.cminflt >> proc_stat.majflt |
| 54 | >> proc_stat.cmajflt >> proc_stat.utime >> proc_stat.stime >> proc_stat.cutime |
| 55 | >> proc_stat.cstime >> proc_stat.priority >> proc_stat.nice >> proc_stat.num_threads |
| 56 | >> proc_stat.itrealvalue >> proc_stat.starttime >> proc_stat.vsize |
| 57 | >> proc_stat.rss; // don't care about the rest |
| 58 | |
| 59 | stat_stream.close(); |
| 60 | |
| 61 | long page_size_kb = sysconf(_SC_PAGE_SIZE); // in case x86-64 is configured to use 2MB pages |
| 62 | // return with MB |
| 63 | *vm_usage = proc_stat.vsize >> 20; |
| 64 | // return with MB |
| 65 | *resident_set = (proc_stat.rss * page_size_kb) >> 20; |
| 66 | #endif // __linux__ |
| 67 | } |
| 68 | |
| 69 | Maybe<double> GetCPUMemoryUsed() { |
| 70 | JUST(CPUSynchronize()); |
no test coverage detected