27 #include "../Defines.h" 36 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 40 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD 45 #include <sys/resource.h> 47 #include <sys/sysctl.h> 48 #include <sys/types.h> 51 #elif TE_PLATFORM == TE_PLATFORMCODE_APPLE 55 #include <sys/sysctl.h> 56 #include <mach/mach.h> 59 #error "Unsuported plataform for physical memory checking" 66 #include <boost/filesystem.hpp> 70 unsigned long long int freemem = 0;
72 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE 75 std::size_t usermem_len =
sizeof(usermem);
77 int mib[2] = { CTL_HW, HW_USERMEM };
79 if(sysctl(mib, 2, &usermem, &usermem_len, NULL, 0) == 0)
81 freemem =
static_cast<unsigned long int>(usermem);
85 throw Exception(
"Could not get free physical memory!");
88 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 89 freemem =
static_cast<unsigned long long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES) );
91 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 93 MEMORYSTATUSEX status_buffer;
94 status_buffer.dwLength =
sizeof(status_buffer);
95 GlobalMemoryStatusEx(&status_buffer);
96 freemem = status_buffer.ullAvailPhys;
98 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
99 GlobalMemoryStatus(status_buffer);
100 freemem =
static_cast<unsigned long int>(status_buffer->dwAvailPhys);
101 delete status_buffer;
104 #error "Unsuported plataform for physical memory checking" 112 unsigned long long int totalmem = 0;
114 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE 117 int mib[2] = { CTL_HW, HW_MEMSIZE };
118 #elif defined(HW_PHYSMEM) 119 unsigned int physmem = 0;
120 int mib[2] = { CTL_HW, HW_PHYSMEM };
121 #elif defined(HW_PHYSMEM64) 123 int mib[2] = { CTL_HW, HW_PHYSMEM64 };
124 #elif defined(HW_REALMEM) 125 unsigned int physmem = 0;
126 int mib[2] = { CTL_HW, HW_REALMEM };
129 std::size_t physmem_len =
sizeof(physmem);
131 if(sysctl(mib, 2, &physmem, &physmem_len, NULL, 0) == 0)
133 totalmem =
static_cast<unsigned long long int>(physmem);
137 throw Exception(
"Could not get total physical memory!");
139 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 140 totalmem =
static_cast<unsigned long long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES) );
142 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 144 MEMORYSTATUSEX status_buffer;
145 status_buffer.dwLength =
sizeof(status_buffer);
146 GlobalMemoryStatusEx(&status_buffer);
147 totalmem = status_buffer.ullTotalPhys;
149 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
150 GlobalMemoryStatus(status_buffer);
151 totalmem =
static_cast<unsigned long int>(status_buffer->dwTotalPhys);
152 delete status_buffer;
156 #error "Unsuported plataform for physical memory checking" 164 unsigned long long int usedmem = 0;
166 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD 167 struct rusage rusageinfo;
168 getrusage( RUSAGE_SELF, &rusageinfo );
169 usedmem =
static_cast<unsigned long long int>(1024 * rusageinfo.ru_maxrss);
171 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX 172 std::string pid, comm, state, ppid, pgrp, session, tty_nr,
173 tpgid, flags, minflt, cminflt, majflt, cmajflt,
174 utime, stime, cutime, cstime, priority, nice,
175 stringO, itrealvalue, starttime;
177 std::ifstream stat_stream(
"/proc/self/stat", std::ios_base::in);
178 if( !stat_stream.is_open() )
180 throw Exception(
"Could not get the used virtual memory!");
183 stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
184 >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
185 >> utime >> stime >> cutime >> cstime >> priority >> nice
186 >> stringO >> itrealvalue >> starttime >> usedmem;
188 #elif TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE 189 struct mach_task_basic_info info;
190 mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT;
191 if ( task_info( mach_task_self( ), MACH_TASK_BASIC_INFO,
192 (task_info_t)&info, &infoCount ) != KERN_SUCCESS )
194 usedmem = (
unsigned long long int)info.resident_size;
196 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
198 MEMORYSTATUSEX status_buffer;
199 status_buffer.dwLength =
sizeof(status_buffer);
200 GlobalMemoryStatusEx(&status_buffer);
201 usedmem = status_buffer.ullTotalVirtual - status_buffer.ullAvailVirtual;
203 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
204 GlobalMemoryStatus( status_buffer );
205 usedmem =
static_cast<unsigned long long int>(status_buffer->dwTotalVirtual - status_buffer->dwAvailVirtual);
206 delete status_buffer;
210 #error "Unsuported plataform for virtual memory checking" 219 unsigned long long int totalmem = 0;
221 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 224 if( getrlimit( RLIMIT_AS, &info ) == 0 )
226 totalmem = (
unsigned long long int)info.rlim_max;
229 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 231 MEMORYSTATUSEX status_buffer;
232 status_buffer.dwLength =
sizeof(status_buffer);
233 GlobalMemoryStatusEx(&status_buffer);
234 totalmem = status_buffer.ullTotalVirtual;
236 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
237 GlobalMemoryStatus( status_buffer );
238 totalmem = (
unsigned long int) status_buffer->dwTotalVirtual;
239 delete status_buffer;
243 #error
"Unsuported plataform for virtual memory checking" 251 unsigned int procnmb = 0;
253 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 254 SYSTEM_INFO siSysInfo;
255 GetSystemInfo(&siSysInfo);
256 procnmb =
static_cast<unsigned int>(siSysInfo.dwNumberOfProcessors);
258 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE 259 procnmb =
static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_ONLN));
262 #error "ERROR: Unsupported platform" 272 char* varValuePtr = getenv(
"PATH");
274 std::string separator;
275 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 277 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 280 #error "Unsuported plataform for virtual memory checking" 285 Tokenize( std::string( varValuePtr ), paths, separator );
293 char* varValuePtr = getenv(
"LD_LIBRARY_PATH");
295 std::string separator;
296 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX) 298 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS 301 #error "Unsuported plataform for virtual memory checking" 306 Tokenize( std::string( varValuePtr ), paths, separator );
TECOMMONEXPORT unsigned long long int GetTotalVirtualMemory()
Returns the amount of total virtual memory (bytes) that can be claimed by the current process (physic...
pthread endif() include_directories($
TECOMMONEXPORT void GetDecompostedLDPathEnvVar(std::vector< std::string > &paths)
Returns the system LD_LIBRARY_PATH enviroment variable, decomposed into directory names...
TECOMMONEXPORT void GetDecompostedPathEnvVar(std::vector< std::string > &paths)
Returns the system PATH enviroment variable, decomposed into directory names, or an empty vector if n...
void Tokenize(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
It tokenizes a given string with a delimiter of your own choice.
TECOMMONEXPORT unsigned int GetPhysProcNumber()
Returns the number of physical processors.
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
TECOMMONEXPORT unsigned long long int GetTotalPhysicalMemory()
Returns the amount of total physical memory (bytes).
Utility functions for dealing with strings.
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
TECOMMONEXPORT unsigned long long int GetFreePhysicalMemory()
Returns the amount of free physical memory (bytes).
TECOMMONEXPORT unsigned long long int GetUsedVirtualMemory()
Returns the amount of used virtual memory (bytes) for the current process (physical + swapped)...