⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 status.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
		if (sz > *minsize) {			sprintf(buf, "head/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		head += sz; tot += sz;	}#line 537 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (b->theap) {		sz = HEAPmemsize(b->theap);		if (sz > *minsize) {			sprintf(buf, "tail/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		tail += sz; tot += sz;	}#line 538 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	}	/* totals per category */	BUNins(bn, "_tot/buns", &buns, FALSE);	BUNins(bn, "_tot/head", &head, FALSE);	BUNins(bn, "_tot/tail", &tail, FALSE);	BUNins(bn, "_tot/hhsh", &hhsh, FALSE);	BUNins(bn, "_tot/thsh", &thsh, FALSE);	BUNins(bn, "_tot/hind", &hind, FALSE);	BUNins(bn, "_tot/tind", &tind, FALSE);	/* special area 1: BBP rec */	sz = BBPlimit * sizeof(BBPrec) + n;	BUNins(bn, "_tot/bbp", &sz, FALSE);	tot += sz;	/* this concludes all major traceable Monet memory usages */	tot += sz;	BUNins(bn, "_tot/found", &tot, FALSE);	/* now look at what the global statistics report (to see if it coincides)	 */	/* how much *used* bytes in heap? */	m = MT_mallinfo();	sz = (size_t) (m.usmblks + m.uordblks + m.hblkhd);	BUNins(bn, "_tot/malloc", &tot, FALSE);	/* measure actual heap size, includes wasted fragmented space and anon mmap space used by malloc() */	sz = GDKvm_heapsize();	BUNins(bn, "_tot/heap", &sz, FALSE);	tot = GDKmem_cursize();	/* allocated swap area memory that is not plain malloc() */	sz = MAX(0, sz - tot);	BUNins(bn, "_tot/valloc", &sz, FALSE);	/* swap-area memory is in either GDKvmalloc or heap */	BUNins(bn, "_tot/swapmem", &tot, FALSE);	BBPunlock("SYSmem_usage");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);	*ret = bn->batCacheid;	return MAL_SUCCEED;}status_export str SYSvm_usage(int *ret, lng *minsize);strSYSvm_usage(int *ret, lng *minsize){	lng buns = 0, hhsh = 0, thsh = 0, hind = 0, tind = 0, head = 0, tail = 0, tot = 0, sz;	BAT *bn = BATnew(TYPE_str, TYPE_lng, 2 * BBPsize);	char buf[1024];	bat i;	if (bn == NULL)		throw(MAL, "status.usage","Could not create BAT");	BBPlock("SYSvm_usage");	for (i = 1; i < BBPsize; i++) {		BAT *b;		str s;		if (!BBPvalid(i))			continue;		s = BBPname(i); 		b = BBP_cache(i);		if (b == NULL || VIEWparent(b)) {			continue;		}		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (1) {		sz = HEAPvmsize(b->batBuns);		if (sz > *minsize) {			sprintf(buf, "buns/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		buns += sz; tot += sz;	}#line 610 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (b->hhash) {		sz = HEAPvmsize(b->hhash->heap);		if (sz > *minsize) {			sprintf(buf, "hhsh/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		hhsh += sz; tot += sz;	}#line 611 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (b->thash) {		sz = HEAPvmsize(b->thash->heap);		if (sz > *minsize) {			sprintf(buf, "thsh/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		thsh += sz; tot += sz;	}#line 612 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (b->hheap) {		sz = HEAPvmsize(b->hheap);		if (sz > *minsize) {			sprintf(buf, "head/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		head += sz; tot += sz;	}#line 613 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"		#line 482 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (b->theap) {		sz = HEAPvmsize(b->theap);		if (sz > *minsize) {			sprintf(buf, "tail/%s", s);			BUNins(bn, buf, &sz, FALSE);		}		tail += sz; tot += sz;	}#line 614 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	}	/* totals per category */	BUNins(bn, "_tot/buns", &buns, FALSE);	BUNins(bn, "_tot/head", &head, FALSE);	BUNins(bn, "_tot/tail", &tail, FALSE);	BUNins(bn, "_tot/hhsh", &hhsh, FALSE);	BUNins(bn, "_tot/thsh", &thsh, FALSE);	BUNins(bn, "_tot/hind", &hind, FALSE);	BUNins(bn, "_tot/tind", &tind, FALSE);	/* special area 1: BBP rec */	sz = BBPmaxsize * sizeof(BBPrec);	BUNins(bn, "_tot/bbp", &sz, FALSE);	tot += sz;	/* this concludes all major traceable Monet virtual memory usages */	tot += sz;	BUNins(bn, "_tot/found", &tot, FALSE);	/* all VM is either GDKmmap or GDKvmalloc (possibly redirected GDKmalloc), *plus* the heap */	sz = GDKvm_cursize();	BUNins(bn, "_tot/vm", &sz, FALSE);	BBPunlock("SYSvm_usage");	if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);	*ret = bn->batCacheid;	return MAL_SUCCEED;}#line 678 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"#ifdef HAVE_SYS_RESOURCE_H# include <sys/resource.h>#endifstatus_export str SYSioStatistics(int *ret);strSYSioStatistics(int *ret){#ifndef NATIVE_WIN32	struct rusage ru;#endif	int i;	BAT *b;#ifndef NATIVE_WIN32	getrusage(RUSAGE_SELF, &ru);#endif	b = BATnew(TYPE_str, TYPE_int, 32);	if (b == 0)		throw(MAL, "catalog.ioStatistics", "Failed to create BAT");#ifndef NATIVE_WIN32	/* store counters, ignore errors */	i = ru.ru_maxrss;	BUNins(b, "maxrss", &i, FALSE);	i = ru.ru_minflt;	BUNins(b, "minflt", &i, FALSE);	i = ru.ru_majflt;	BUNins(b, "majflt", &i, FALSE);	i = ru.ru_nswap;	BUNins(b, "nswap", &i, FALSE);	i = ru.ru_inblock;	BUNins(b, "inblock", &i, FALSE);	i = ru.ru_oublock;	BUNins(b, "oublock", &i, FALSE);	i = ru.ru_nvcsw;	BUNins(b, "nvcsw", &i, FALSE);	i = ru.ru_nivcsw;	BUNins(b, "ninvcsw", &i, FALSE);#else	i = int_nil;	BUNins(b, "maxrss", &i, FALSE);	BUNins(b, "minflt", &i, FALSE);	BUNins(b, "majflt", &i, FALSE);	BUNins(b, "nswap", &i, FALSE);	BUNins(b, "inblock", &i, FALSE);	BUNins(b, "oublock", &i, FALSE);	BUNins(b, "nvcsw", &i, FALSE);	BUNins(b, "ninvcsw", &i, FALSE);#endif	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 189 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (BBPindex("view_gdk_io") <= 0)		BATname(b, "io");	BATroles(b,"gdk","io");	BATmode(b,TRANSIENT);	BBPkeepref(b->batCacheid);	BATfakeCommit(b);	*ret = b->batCacheid;#line 730 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	return MAL_SUCCEED;}status_export str SYSgdkEnv(int *ret);strSYSgdkEnv(int *ret){	int pbat = 0;	int pdisk = 0;	int pheat = 0;	bat i;	int tmp = 0, per = 0;	BAT *b;	b = BATnew(TYPE_str, TYPE_int, 32);	if (b == 0)		throw(MAL, "status.gdkEnv","Could not create BAT");	for (i = 1; i < BBPsize; i++) {		if (BBPvalid(i)) {			pbat++;			if (BBP_cache(i)) {				pheat += BBP_lastused(i);				if (BBP_cache(i)->batPersistence == PERSISTENT)					per++;				else					tmp++;			} else {				pdisk++;			}		}	}	b = BUNins(b, "bats", &pbat, FALSE);	b = BUNins(b, "tmpbats", &tmp, FALSE);	b = BUNins(b, "perbats", &per, FALSE);	b = BUNins(b, "ondisk", &pdisk, FALSE);	b = BUNins(b, "todisk", &BBPout, FALSE);	b = BUNins(b, "fromdisk", &BBPin, FALSE);	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 189 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (BBPindex("view_gdk_env") <= 0)		BATname(b, "env");	BATroles(b,"gdk","env");	BATmode(b,TRANSIENT);	BBPkeepref(b->batCacheid);	BATfakeCommit(b);	*ret = b->batCacheid;#line 770 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	return MAL_SUCCEED;}status_export str SYSgdkThread(int *ret);strSYSgdkThread(int *ret){	BAT *b;	int i;	b = BATnew(TYPE_int, TYPE_str, THREADS);	if (b == 0)		throw(MAL, "catalog.gdkThread", "Failed to create BAT");	for (i = 0; i < THREADS; i++)		if (GDKthreads[i].pid) {			BUNins(b, &GDKthreads[i].tid, GDKthreads[i].name, FALSE);		}	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 189 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (BBPindex("view_gdk_thread") <= 0)		BATname(b, "thread");	BATroles(b,"gdk","thread");	BATmode(b,TRANSIENT);	BBPkeepref(b->batCacheid);	BATfakeCommit(b);	*ret = b->batCacheid;#line 790 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	return MAL_SUCCEED;}#line 797 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"#ifndef F_OK#define F_OK 0#endifstr SYSgetDatabases(int *ret){	BAT *b;	DIR *d, *db;	struct dirent *e;	char buf[PATHLENGTH];	FILE *f;	int uid,pid;		b = BATnew(TYPE_str, TYPE_str, 50);	/* scan the parent for directories */	d= opendir("..");	while ( (e=readdir(d)) != NULL){		if( *e->d_name == '.') continue;		snprintf(buf,PATHLENGTH,"..%c%s",DIR_SEP,e->d_name);		db= opendir(buf);		if( db != NULL) {			snprintf(buf,PATHLENGTH,"..%c%s%c.gdk_lock",DIR_SEP,e->d_name,DIR_SEP);			f= fopen(buf,"r");			if( f  && fgets(buf,PATHLENGTH,f) != NULL){				sscanf(buf,"USR=%d PID=%d %s", &uid,&pid,buf);				/* w00t! for platform independence! (NOT!) */				snprintf(buf,PATHLENGTH,"/proc/%d",pid);				fclose(f);			} else				snprintf(buf,PATHLENGTH,"..%c%s%c.mguardian.pid",DIR_SEP,e->d_name,DIR_SEP);			/* not water-proof, PID can exist, and be alive, but not an			   mserver, need to check process name */			BUNins(b,e->d_name,(access(buf,F_OK)?"sleeping":"running"), FALSE);			closedir(db);		} 	}	(void) closedir(d);	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 189 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (BBPindex("view_databases_mode") <= 0)		BATname(b, "mode");	BATroles(b,"databases","mode");	BATmode(b,TRANSIENT);	BBPkeepref(b->batCacheid);	BATfakeCommit(b);	*ret = b->batCacheid;#line 834 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	return MAL_SUCCEED;}str SYSgetPorts(int *ret, str *lang){	BAT *b;	DIR *d, *db;	struct dirent *e;	char buf[PATHLENGTH];	FILE *f;	int port;	str llang;		/* if lang is NULL, default to "mal" */	llang = (lang == NULL ? "mal" : *lang);	b = BATnew(TYPE_str, TYPE_int, 50);	/* scan the parent for directories */	d= opendir("..");	while ( (e=readdir(d)) != NULL){		if( *e->d_name == '.') continue;		snprintf(buf,PATHLENGTH,"..%c%s",DIR_SEP,e->d_name);		db= opendir(buf);		if( db != NULL) {			snprintf(buf,PATHLENGTH,"..%c%s%c.%s.port",DIR_SEP,e->d_name,DIR_SEP,llang);			f= fopen(buf,"r");			if( f  && fgets(buf,PATHLENGTH,f) != NULL){				port= (int) strtol(buf,NULL,10);				fclose(f);			} else port = 0;			BUNins(b, e->d_name, (ptr)(port==0? &int_nil: &port), FALSE);			closedir(db);		} 	}	(void) closedir(d);	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 189 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	if (BBPindex("view_databases_port") <= 0)		BATname(b, "port");	BATroles(b,"databases","port");	BATmode(b,TRANSIENT);	BBPkeepref(b->batCacheid);	BATfakeCommit(b);	*ret = b->batCacheid;#line 870 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"	return MAL_SUCCEED;}#line 874 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/kernel/status.mx"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -