blob: 349f90ff6ec230877e91992a75f69eb3dc2f9582 [file] [log] [blame]
/*
* Copyright 2015 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "basics/processutils.h"
#include <sys/resource.h>
#include <unistd.h>
#include <gperftools/malloc_extension.h>
pid_t ProcessUtils::getPid() { return ::getpid(); }
int ProcessUtils::getResourceUsage(struct rusage *usage) { return ::getrusage(RUSAGE_SELF, usage); }
/* ``generic.heap_size'' also includes unmapped pages in heap. These bytes
* have been release back to OS. They always count towards virtual memory
* memory usage, and depending on OS, typically do nto count towards physical
* memory usage.
*
* See more at: https://gperftools.github.io/gperftools/tcmalloc.html
*
* Here is a sample output of heap usage statistic by
* ``MallocExtension::instance()->GetStats''
*
* 484254200 ( 461.8 MiB) Bytes in use by application
* + 0 ( 0.0 MiB) Bytes in page heap freelist
* + 22847400 ( 21.8 MiB) Bytes in central cache freelist
* + 11551232 ( 11.0 MiB) Bytes in transfer cache freelist
* + 5528672 ( 5.3 MiB) Bytes in thread cache freelists
* + 2617504 ( 2.5 MiB) Bytes in malloc metadata
* ------------
* = 526799008 ( 502.4 MiB) Actual memory used (physical + swap)
* + 41000960 ( 39.1 MiB) Bytes released to OS (aka unmapped)
* ------------
* = 567799968 ( 541.5 MiB) Virtual address space used
*
* 17441 Spans in use
* 3 Thread heaps in use
* 8192 Tcmalloc page size
*
* In this example, ``generic.heap_size'' is 541.5 MiB, and
* ``tcmalloc.pageheap_unmapped_bytes'' is 39.1 MiB. Actual memory
* usage would be 502.4 MiB.
*
*/
size_t ProcessUtils::getTotalMemoryUsed() {
size_t total = 0, unmapped = 0;
MallocExtension::instance()->GetNumericProperty("generic.heap_size", &total);
MallocExtension::instance()->GetNumericProperty(
"tcmalloc.pageheap_unmapped_bytes", &unmapped);
return total - unmapped;
}
sp_string ProcessUtils::getCurrentWorkingDirectory() {
char buff[FILENAME_MAX];
getcwd(buff, FILENAME_MAX);
sp_string current_working_dir(buff);
return current_working_dir;
}