`
CharlesCui
  • 浏览: 431055 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

别总以为自己很烂

阅读更多
我想写个Unix通用的监控,

Linux上有proc很方便,但BSD上Solaris上没这玩意,
想得到CPU啊Load啊IO等,必须调用Kernel中的相关函数.
更重要的是,
如果从Linux的proc里面把相关数据读出来,
感觉很不体面,不够有技术含量:P

但用了哪些函数呢?
我下载了rstatd和top的源码看看,
看看他们怎么监控的,
不看不知道,以为他们会很技术很NB的调用kernel中的东西呢,结果还是访问proc里面的文件.....

其实自己想到的东西未必有多差,这么流行的东西实现的方式不也很土么.

顺便写下:

top在不同的平台使用了不同的方法得到系统负载,

在linux下面就用了我以为很土其实还不错的proc来得到,代码如下:
/* get load averages */
    {
	fd = open("loadavg", O_RDONLY);
	len = read(fd, buffer, sizeof(buffer)-1);
	close(fd);
	buffer[len] = '\0';

	info->load_avg[0] = strtod(buffer, &p);
	info->load_avg[1] = strtod(p, &p);
	info->load_avg[2] = strtod(p, &p);
	p = skip_token(p);			/* skip running/tasks */
	p = skip_ws(p);
	if (*p)
	    info->last_pid = atoi(p);
	else
	    info->last_pid = -1;
    }


在macos上用sysctl函数得到,代码如下:

    /* get load averages */
    {
        size_t size = sizeof(load);
        static int mib[] = { CTL_VM, VM_LOADAVG };

        if (sysctl(mib, 2, &load, &size, NULL, 0) < 0) {
	    (void) fprintf(stderr, "top: sysctl failed: %s\n", strerror(errno))
;
	    bzero(&load, sizeof(load));
        }
    }


再看一下Rstatd监控的实现,以获得load为例:

static void	get_load(struct statsusers *stats) {
	FILE	*fp;
	double	avrun[3];
	if (NULL == (fp = fopen("/proc/loadavg", "r"))) {
		return;
	}
	if (!fscanf(fp , "%lf %lf %lf", &avrun[0], &avrun[1], &avrun[2])) {
		syslog(LOG_CRIT, "unexpected data format in /proc/loadavg");
		exit(EXIT_FAILURE);
	}
	stats->avenrun[0] = avrun[0] * FSCALE;
	stats->avenrun[1] = avrun[1] * FSCALE;
	stats->avenrun[2] = avrun[2] * FSCALE;
	fclose(fp);
}


方法也是土办法.

我就纳闷,频繁的打开文件读取其中的内容本来就是件体力活,
如果被监控的应用的性能本来很高,不耗费什么系统资源,
结果监控出来的数据几乎都是这些监控软件搞出来的,多不严谨啊.

估计大家都认为没必要这么计较吧.

看来,写个通用的监控不容易啊,除非我去扣top的输出,但这更土!
0
0
分享到:
评论
1 楼 cx6445 2010-11-05  
我一直觉得读/PROC的数据来监控是kernel很优雅的设计,并且能方便的修改部分内核参数。

相关推荐

    别以为自己当老板就很容易浅谈创业开局六招.pdf

    【创业开局六招详解】 1. **以“新”制胜**:在创业初期,创新是关键。选择具有独特性和前瞻性的项目,可以让你在竞争激烈的市场中脱颖而出。这意味着你需要不断思考,找到别人未曾注意到的商机,或者用全新的方式...

    别以为自己当老板就很容易浅谈创业开局六招

    都说成功是没有捷径的,而别以为自己当老板就很容易浅谈创业开局六招却能够给你指引通向成功的方向,欢迎...该文档为别以为自己当老板就很容易浅谈创业开局六招,是一份很不错的参考资料,具有较高参考价值,感兴趣...

    别以为少儿编程就是冰冷的代码【育儿知识】.doc

    别以为少儿编程就是冰冷的代码【育儿知识】.doc

    Ted英语演讲稿:Onwhatwethinkweknow?我们以为自己知道的.pdf

    Ted英语演讲稿:Onwhatwethinkweknow?我们以为自己知道的.pdf

    别以为你的无线是安全的

    无线破解,我自己试了,用vmware8.0,可以用,不过字典不好下,有兴趣的同学们去试试吧

    别以为进四大就完事儿了,财务之路应该怎么走?.zip

    在财务领域,进入四大会计事务所(普华永道、毕马威、德勤和安永)被视为职业生涯的一个重要...阅读“别以为进四大就完事儿了,财务之路应该怎么走?”这本书或PDF文档,相信会为你的职业发展提供更具体、实用的指导。

    别以为你懂电脑 漏洞问题不可小觑.docx

    【电脑漏洞问题详解】 在数字化日益普及的今天,电脑已经成为我们日常生活和工作中不可或缺的一部分。然而,随着电脑的广泛使用,安全问题也随之凸显,尤其是系统漏洞问题。这些漏洞如同电脑的弱点,一旦被黑客利用...

    别以为进四大就完事儿了,财务之路应该怎么走?.pdf

    但其实这只是开始,职业发展之路还很漫长。在这个变化多端的行业里,财务专业人士需要精心规划自己的发展路径,掌握财务领域的各个分支,并明确未来发展的方向。 首先,从职业发展的角度来看,财务领域主要有三个大...

    有一种疼,叫作你以为他疼

    但《有一种疼,叫作你以为他疼》这篇文章深刻揭示了这种共情的局限性,它让我们重新审视自己的感受和对他人的理解。文章不仅对肉体疼痛与精神痛苦进行了区分,还提出了第三种疼痛——源自内心的虚无感,这使读者意识...

    你以为的程序员

    你以为的程序员

    别以为爱说话是好事,面试管好嘴,这些话题不能说

    文章为大家介绍了在面试时哪些话不能说。

    加密解密手册.rar

    别以为解密是什么很不光彩的事情,离开了我们这些CRACKER,软件加密水平也不会有很大的提高。就好比武侠小说里写的一样,武功要相互切磋才会不断进步。天外有天,人外有人,强中自有强中手,如果谁以为自己的武功...

    初中语文文摘生活不要以为生活错待了你

    因此,我们不应总是纠结于自己的不足,而是要学会欣赏自己的优点,期待自己的改变,这样我们才能不断地在生活中寻找到幸福和快乐。 最后,善良的价值是我们不应忽视的。虽然在现实中,善良有时会受到伤害,但这并不...

    在运行jsp文件是,总显示404.md

    我在做javaweb实验的时候,遇到了一件很无语的事,我感觉我的代码没有问题,但是运行起来总是404,我总以为是我的哪个跳转的页面写错了,然后总在检查。其实后来想了一想,我是遇到问题就慌了,就乱检查,这样很浪费...

    《别饿坏了那匹马》课件.ppt

    他对男孩的关心并不止于此,当男孩误以为真有马而担心马草迟到时,青年的反应也显示出他的用心良苦。他用三次重复的“别饿坏了那匹马”这句话,每次都有着不同的深意,分别是出于让男孩安心看书、暗示妹妹接受马草...

    高中语文文摘校园对不起我以为你是我的女朋友

    而在一次志愿者活动中的相遇,却因为一系列的误会,让华沙误以为自己的单恋得到了回应。当周允在圣诞夜邀请她吃饭时,她欣喜若狂,却未料到这只是出于周允对她的感谢,因为他误以为华沙是他的女朋友。这样的尴尬局面...

    grown eyes girls LOVE

    一个很好听的歌,我在网上午一找到的,本来以为很烂但一听确实很好

    国旗下讲话稿:雅以为美.doc

    国旗下讲话稿:雅以为美.doc

    我说我靠我一直以为是心理.txt

    我说我靠我一直以为是心理.txt

    大班社会领域《我喜欢我自己》;.pptx

    活动准备包括青蛙图片和《我喜欢我自己》的故事幻灯片,故事讲述了一只青蛙原本以为自己是最能干、最美的,但在与野鸭、小松鼠和山羊的比较中,它感到自卑。但经过山羊的提醒,青蛙认识到每个生物都有自己的独特之处...

Global site tag (gtag.js) - Google Analytics