mirror of
https://github.com/bjango/istatserverlinux.git
synced 2025-10-23 07:58:05 +00:00
FreeBSD changes
Fixed memory monitoring on FreeBSD 11 .kvm monitoring improvements.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ([2.59])
|
AC_PREREQ([2.59])
|
||||||
AC_INIT([istatserver], [3.0], [http://github.com/bjango/istatserverlinux/issues])
|
AC_INIT([istatserver], [3.01], [http://github.com/bjango/istatserverlinux/issues])
|
||||||
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
@@ -101,6 +101,22 @@ void Stats::startStats()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBKVM
|
||||||
|
kvm_t *kd;
|
||||||
|
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) != NULL)
|
||||||
|
{
|
||||||
|
cpuStats.kd = kd;
|
||||||
|
loadStats.kd = kd;
|
||||||
|
memoryStats.kd = kd;
|
||||||
|
activityStats.kd = kd;
|
||||||
|
sensorStats.kd = kd;
|
||||||
|
networkStats.kd = kd;
|
||||||
|
diskStats.kd = kd;
|
||||||
|
batteryStats.kd = kd;
|
||||||
|
processStats.kd = kd;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SQLITE
|
#ifdef USE_SQLITE
|
||||||
if(historyEnabled == true)
|
if(historyEnabled == true)
|
||||||
{
|
{
|
||||||
|
@@ -286,6 +286,10 @@ class StatsBase
|
|||||||
bool historyEnabled;
|
bool historyEnabled;
|
||||||
bool debugLogging;
|
bool debugLogging;
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBKVM
|
||||||
|
kvm_t *kd;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SQLITE
|
#ifdef USE_SQLITE
|
||||||
std::vector<DatabaseItem> databaseQueue;
|
std::vector<DatabaseItem> databaseQueue;
|
||||||
Database _database;
|
Database _database;
|
||||||
|
@@ -105,7 +105,7 @@ void StatsMemory::update(long long sampleID)
|
|||||||
addSample(_mem, sampleID);
|
addSample(_mem, sampleID);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(USE_MEM_SYSCTLBYNAME) && defined(HAVE_SYSCTLBYNAME)
|
#elif defined(HAVE_SYSCTLBYNAME) && (defined(USE_MEM_SYSCTLBYNAME) || (defined(__FreeBSD__) && __FreeBSD__ >= 11))
|
||||||
|
|
||||||
void StatsMemory::init()
|
void StatsMemory::init()
|
||||||
{
|
{
|
||||||
@@ -120,6 +120,9 @@ void StatsMemory::init()
|
|||||||
databaseKeys.push_back("swaptotal");
|
databaseKeys.push_back("swaptotal");
|
||||||
databaseKeys.push_back("swapused");
|
databaseKeys.push_back("swapused");
|
||||||
|
|
||||||
|
databaseKeys.push_back("swapin");
|
||||||
|
databaseKeys.push_back("swapout");
|
||||||
|
|
||||||
databaseMap.push_back(memory_value_total);
|
databaseMap.push_back(memory_value_total);
|
||||||
databaseMap.push_back(memory_value_free);
|
databaseMap.push_back(memory_value_free);
|
||||||
databaseMap.push_back(memory_value_active);
|
databaseMap.push_back(memory_value_active);
|
||||||
@@ -131,6 +134,9 @@ void StatsMemory::init()
|
|||||||
databaseMap.push_back(memory_value_swaptotal);
|
databaseMap.push_back(memory_value_swaptotal);
|
||||||
databaseMap.push_back(memory_value_swapused);
|
databaseMap.push_back(memory_value_swapused);
|
||||||
|
|
||||||
|
databaseMap.push_back(memory_value_swapin);
|
||||||
|
databaseMap.push_back(memory_value_swapout);
|
||||||
|
|
||||||
_init();
|
_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +145,7 @@ void StatsMemory::update(long long sampleID)
|
|||||||
mem_data _mem;
|
mem_data _mem;
|
||||||
prepareSample(&_mem);
|
prepareSample(&_mem);
|
||||||
|
|
||||||
u_int _total, _inactive, _free, _active, _cached, _wired, _swaptotal, _swapused;
|
u_int _total, _inactive, _free, _active, _cached, _wired, _swaptotal, _swapused, _swapin, _swapout;
|
||||||
long _buf;
|
long _buf;
|
||||||
|
|
||||||
int pagesize = getpagesize();
|
int pagesize = getpagesize();
|
||||||
@@ -170,10 +176,30 @@ void StatsMemory::update(long long sampleID)
|
|||||||
if (sysctlbyname("vm.swap_anon_use", &_swapused, &len, NULL, 0) < 0)
|
if (sysctlbyname("vm.swap_anon_use", &_swapused, &len, NULL, 0) < 0)
|
||||||
_swapused = 0;
|
_swapused = 0;
|
||||||
|
|
||||||
|
if (sysctlbyname("vm.stats.vm.v_swappgsin", &_swapin, &len, NULL, 0) < 0)
|
||||||
|
_swapin = 0;
|
||||||
|
|
||||||
|
if (sysctlbyname("vm.stats.vm.v_swappgsout", &_swapout, &len, NULL, 0) < 0)
|
||||||
|
_swapout = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
len = sizeof(_buf);
|
len = sizeof(_buf);
|
||||||
if (sysctlbyname("vfs.bufspace", &_buf, &len, NULL, 0) < 0)
|
if (sysctlbyname("vfs.bufspace", &_buf, &len, NULL, 0) < 0)
|
||||||
_buf = 0;
|
_buf = 0;
|
||||||
|
|
||||||
|
if(_buf == 0)
|
||||||
|
{
|
||||||
|
size_t bufsizelen;
|
||||||
|
long bufsize;
|
||||||
|
bufsizelen = sizeof(bufsize);
|
||||||
|
|
||||||
|
if (sysctlbyname("kern.nbuf", &bufsize, &bufsizelen, NULL, 0) >= 0)
|
||||||
|
{
|
||||||
|
_buf = ((bufsize * 16) * 1024);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_mem.values[memory_value_total] = (double)(_total * pagesize);
|
_mem.values[memory_value_total] = (double)(_total * pagesize);
|
||||||
_mem.values[memory_value_free] = (double)(_free * pagesize);
|
_mem.values[memory_value_free] = (double)(_free * pagesize);
|
||||||
_mem.values[memory_value_active] = (double)(_active * pagesize);
|
_mem.values[memory_value_active] = (double)(_active * pagesize);
|
||||||
@@ -184,6 +210,20 @@ void StatsMemory::update(long long sampleID)
|
|||||||
_mem.values[memory_value_buffer] = (double)(_buf);
|
_mem.values[memory_value_buffer] = (double)(_buf);
|
||||||
_mem.values[memory_value_swapused] = (double)(_swapused * pagesize);
|
_mem.values[memory_value_swapused] = (double)(_swapused * pagesize);
|
||||||
_mem.values[memory_value_swaptotal] = (double)(_swaptotal * pagesize);
|
_mem.values[memory_value_swaptotal] = (double)(_swaptotal * pagesize);
|
||||||
|
_mem.values[memory_value_swapin] = (double)(_swapin * pagesize);
|
||||||
|
_mem.values[memory_value_swapout] = (double)(_swapout * pagesize);
|
||||||
|
|
||||||
|
#if defined(HAVE_LIBKVM) && defined(__FreeBSD__)
|
||||||
|
struct kvm_swap swap[1];
|
||||||
|
{
|
||||||
|
if (kvm_getswapinfo(kd, swap, 1, 0) != -1)
|
||||||
|
{
|
||||||
|
_mem.values[memory_value_swaptotal] = (double)((double)swap[0].ksw_total * pagesize);
|
||||||
|
_mem.values[memory_value_swapused] = (double)((double)swap[0].ksw_used * pagesize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
addSample(_mem, sampleID);
|
addSample(_mem, sampleID);
|
||||||
}
|
}
|
||||||
@@ -354,7 +394,6 @@ void StatsMemory::update(long long sampleID)
|
|||||||
mem_data _mem;
|
mem_data _mem;
|
||||||
prepareSample(&_mem);
|
prepareSample(&_mem);
|
||||||
|
|
||||||
kvm_t *kd;
|
|
||||||
size_t len;
|
size_t len;
|
||||||
double kbpp;
|
double kbpp;
|
||||||
struct vmmeter sum;
|
struct vmmeter sum;
|
||||||
@@ -365,17 +404,10 @@ void StatsMemory::update(long long sampleID)
|
|||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "kvm_open(): %s\n", strerror(errno));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get virtual memory data */
|
/* get virtual memory data */
|
||||||
if (kvm_nlist(kd, nl) == -1)
|
if (kvm_nlist(kd, nl) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "kvm_nlist(): %s\n", strerror(errno));
|
cout << "kvm_nlist(): " << strerror(errno) << endl;
|
||||||
kvm_close(kd);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,8 +415,7 @@ void StatsMemory::update(long long sampleID)
|
|||||||
|
|
||||||
if (kvm_read(kd, nl[0].n_value, &sum, len) == -1)
|
if (kvm_read(kd, nl[0].n_value, &sum, len) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "kvm_read(): %s\n", strerror(errno));
|
cout << "kvm_read(): " << strerror(errno) << endl;
|
||||||
kvm_close(kd);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,8 +430,8 @@ void StatsMemory::update(long long sampleID)
|
|||||||
_mem.values[memory_value_wired] = (double)(sum.v_wire_count * kbpp);
|
_mem.values[memory_value_wired] = (double)(sum.v_wire_count * kbpp);
|
||||||
_mem.values[memory_value_used] = (double)(_mem.values[memory_value_active] + _mem.values[memory_value_wired]);
|
_mem.values[memory_value_used] = (double)(_mem.values[memory_value_active] + _mem.values[memory_value_wired]);
|
||||||
|
|
||||||
_mem.values[memory_value_swapin] = (double)(sum.v_swappgsin);
|
_mem.values[memory_value_swapin] = (double)(sum.v_swappgsin * kbpp);
|
||||||
_mem.values[memory_value_swapout] = (double)(sum.v_swappgsout);
|
_mem.values[memory_value_swapout] = (double)(sum.v_swappgsout * kbpp);
|
||||||
|
|
||||||
#ifdef HAVE_SYSCTLBYNAME
|
#ifdef HAVE_SYSCTLBYNAME
|
||||||
size_t bufsizelen;
|
size_t bufsizelen;
|
||||||
@@ -415,15 +446,12 @@ void StatsMemory::update(long long sampleID)
|
|||||||
|
|
||||||
if (kvm_getswapinfo(kd, swap, 1, 0) == -1)
|
if (kvm_getswapinfo(kd, swap, 1, 0) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "kvm_getswapinfo(): %s\n", strerror(errno));
|
cout << "kvm_getswapinfo(): " << strerror(errno) << endl;
|
||||||
kvm_close(kd);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_mem.values[memory_value_swaptotal] = (double)(swap[0].ksw_total * kbpp);
|
_mem.values[memory_value_swaptotal] = (double)((double)swap[0].ksw_total * kbpp);
|
||||||
_mem.values[memory_value_swapused] = (double)(swap[0].ksw_used * kbpp);
|
_mem.values[memory_value_swapused] = (double)((double)swap[0].ksw_used * kbpp);
|
||||||
|
|
||||||
kvm_close(kd);
|
|
||||||
|
|
||||||
addSample(_mem, sampleID);
|
addSample(_mem, sampleID);
|
||||||
|
|
||||||
|
@@ -210,12 +210,6 @@ void StatsProcesses::update(long long sampleID, double totalTicks)
|
|||||||
#endif
|
#endif
|
||||||
int n_processes;
|
int n_processes;
|
||||||
int i;
|
int i;
|
||||||
kvm_t *kd;
|
|
||||||
|
|
||||||
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(PROCESSES_KVM_NETBSD)
|
#if defined(PROCESSES_KVM_NETBSD)
|
||||||
p = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(kinfo_proc2), &n_processes);
|
p = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(kinfo_proc2), &n_processes);
|
||||||
@@ -277,8 +271,6 @@ void StatsProcesses::update(long long sampleID, double totalTicks)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kvm_close(kd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(USE_PROCESSES_PROCFS)
|
#elif defined(USE_PROCESSES_PROCFS)
|
||||||
|
@@ -56,7 +56,7 @@ class process_info
|
|||||||
long long sampleID;
|
long long sampleID;
|
||||||
char name[128];
|
char name[128];
|
||||||
};
|
};
|
||||||
class StatsProcesses
|
class StatsProcesses : public StatsBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void update(long long sampleID, double ticks);
|
void update(long long sampleID, double ticks);
|
||||||
|
Reference in New Issue
Block a user