mirror of
https://github.com/bjango/istatserverlinux.git
synced 2025-10-25 08:50:46 +00:00
FreeBSD changes
Fixed memory monitoring on FreeBSD 11 .kvm monitoring improvements.
This commit is contained in:
@@ -286,6 +286,10 @@ class StatsBase
|
||||
bool historyEnabled;
|
||||
bool debugLogging;
|
||||
|
||||
#ifdef HAVE_LIBKVM
|
||||
kvm_t *kd;
|
||||
#endif
|
||||
|
||||
#ifdef USE_SQLITE
|
||||
std::vector<DatabaseItem> databaseQueue;
|
||||
Database _database;
|
||||
|
||||
@@ -105,7 +105,7 @@ void StatsMemory::update(long long 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()
|
||||
{
|
||||
@@ -120,6 +120,9 @@ void StatsMemory::init()
|
||||
databaseKeys.push_back("swaptotal");
|
||||
databaseKeys.push_back("swapused");
|
||||
|
||||
databaseKeys.push_back("swapin");
|
||||
databaseKeys.push_back("swapout");
|
||||
|
||||
databaseMap.push_back(memory_value_total);
|
||||
databaseMap.push_back(memory_value_free);
|
||||
databaseMap.push_back(memory_value_active);
|
||||
@@ -131,6 +134,9 @@ void StatsMemory::init()
|
||||
databaseMap.push_back(memory_value_swaptotal);
|
||||
databaseMap.push_back(memory_value_swapused);
|
||||
|
||||
databaseMap.push_back(memory_value_swapin);
|
||||
databaseMap.push_back(memory_value_swapout);
|
||||
|
||||
_init();
|
||||
}
|
||||
|
||||
@@ -139,7 +145,7 @@ void StatsMemory::update(long long sampleID)
|
||||
mem_data _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;
|
||||
|
||||
int pagesize = getpagesize();
|
||||
@@ -170,10 +176,30 @@ void StatsMemory::update(long long sampleID)
|
||||
if (sysctlbyname("vm.swap_anon_use", &_swapused, &len, NULL, 0) < 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);
|
||||
if (sysctlbyname("vfs.bufspace", &_buf, &len, NULL, 0) < 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_free] = (double)(_free * 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_swapused] = (double)(_swapused * 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);
|
||||
}
|
||||
@@ -354,7 +394,6 @@ void StatsMemory::update(long long sampleID)
|
||||
mem_data _mem;
|
||||
prepareSample(&_mem);
|
||||
|
||||
kvm_t *kd;
|
||||
size_t len;
|
||||
double kbpp;
|
||||
struct vmmeter sum;
|
||||
@@ -365,17 +404,10 @@ void StatsMemory::update(long long sampleID)
|
||||
{ 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 */
|
||||
if (kvm_nlist(kd, nl) == -1)
|
||||
{
|
||||
fprintf(stderr, "kvm_nlist(): %s\n", strerror(errno));
|
||||
kvm_close(kd);
|
||||
cout << "kvm_nlist(): " << strerror(errno) << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -383,8 +415,7 @@ void StatsMemory::update(long long sampleID)
|
||||
|
||||
if (kvm_read(kd, nl[0].n_value, &sum, len) == -1)
|
||||
{
|
||||
fprintf(stderr, "kvm_read(): %s\n", strerror(errno));
|
||||
kvm_close(kd);
|
||||
cout << "kvm_read(): " << strerror(errno) << endl;
|
||||
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_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_swapout] = (double)(sum.v_swappgsout);
|
||||
_mem.values[memory_value_swapin] = (double)(sum.v_swappgsin * kbpp);
|
||||
_mem.values[memory_value_swapout] = (double)(sum.v_swappgsout * kbpp);
|
||||
|
||||
#ifdef HAVE_SYSCTLBYNAME
|
||||
size_t bufsizelen;
|
||||
@@ -415,15 +446,12 @@ void StatsMemory::update(long long sampleID)
|
||||
|
||||
if (kvm_getswapinfo(kd, swap, 1, 0) == -1)
|
||||
{
|
||||
fprintf(stderr, "kvm_getswapinfo(): %s\n", strerror(errno));
|
||||
kvm_close(kd);
|
||||
cout << "kvm_getswapinfo(): " << strerror(errno) << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
_mem.values[memory_value_swaptotal] = (double)(swap[0].ksw_total * kbpp);
|
||||
_mem.values[memory_value_swapused] = (double)(swap[0].ksw_used * kbpp);
|
||||
|
||||
kvm_close(kd);
|
||||
_mem.values[memory_value_swaptotal] = (double)((double)swap[0].ksw_total * kbpp);
|
||||
_mem.values[memory_value_swapused] = (double)((double)swap[0].ksw_used * kbpp);
|
||||
|
||||
addSample(_mem, sampleID);
|
||||
|
||||
|
||||
@@ -210,12 +210,6 @@ void StatsProcesses::update(long long sampleID, double totalTicks)
|
||||
#endif
|
||||
int n_processes;
|
||||
int i;
|
||||
kvm_t *kd;
|
||||
|
||||
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(PROCESSES_KVM_NETBSD)
|
||||
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)
|
||||
|
||||
@@ -56,7 +56,7 @@ class process_info
|
||||
long long sampleID;
|
||||
char name[128];
|
||||
};
|
||||
class StatsProcesses
|
||||
class StatsProcesses : public StatsBase
|
||||
{
|
||||
public:
|
||||
void update(long long sampleID, double ticks);
|
||||
|
||||
Reference in New Issue
Block a user